BDE32bit, WIN98, ACCESS DB. Als Ergebnis einer SQL Abfrage erhalte ich eine größere Reihe von Sätzen zurück. Diese möchte ich nun in eine Datei (TXT) schreiben oder z.B in einem TreeView anzeigen o.ä. Momentan durchlaufe ich alle Sätze wie folgt: Tabel.first; While not tabel.eof ..... tabel.next. Funktioniert auch. Leider viel zu langsam. Gibt es eine Möglichkeit (egal wie u. womit BDE oder ADO) alle Sätze scheller zu durchlaufen ? Da ich teilweise schon bei oder vor dem Programmstart bestimmen kann was ich benötige habe ich daran gedacht eine StoredProc zu benutzen wäre das sinnvoll ? In welchem Buch werden StoredProcs (32bit, ACCESS mit Delphi über ADO/BDE) erklärt. Danke Jörg
Announcement
Collapse
No announcement yet.
Alle Sätze einer Tabelle Durchlaufen
Collapse
X
-
Hallo,
wenn die Datenmenge im Programm angezeigt wird, sollte man vor dem schleifenweisen Blättern die Methode <b>DisableControls</b> aufrufen.
Ansonsten kann man über ADO die komplette Datenmenge in ASCII-Form (1 Datensatz je Zeile; Feldtrennzeichen frei wählbar) abrufen - allerdings sollte die Performance in diesem Fall gleich der BDE sein. Das folgende Beispiel greift direkt über die ADO-Objekte (d.h. die ADO-Komponenten von Delphi 5 werden nicht benötigt) auf die MDB-Beispieldatenbank von Delphi 5 zu:
<pre>
uses ADODB_TLB;
procedure TFormMain.ButtonOpenSQLClick(Sender: TObject);
var
aConnection : _Connection;
aRecordset : _Recordset;
swConnString: WideString;
swData : WideString;
iRecCount : Integer;
begin
MemoCountry.Lines.Clear;
StatusBar1.SimpleText := 'Recordset für SQL wird geöffnet....';
// Step 1: Connection-Objekt
aConnection:= CoConnection.Create;
swConnString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=C:\Database\dbdemos.mdb;' +
'Persist Security Info=False';
aConnection.Open(swConnString, '', '', -1);
// Step 2: Recordset-Objekt
aRecordset:=CoRecordSet.Create;
try
aRecordset.CursorType := adOpenKeyset;
aRecordset.LockType := adLockOptimistic;
aRecordset.Open('SELECT * FROM Country', aConnection, adOpenStatic,
adLockReadOnly, adCmdText);
iRecCount := aRecordset.Get_RecordCount;
swData := aRecordset.GetString(adClipString, iRecCount, '; ', #13#10, '(NULL)');
MemoCountry.Lines.Add(swData);
finally
aRecordset.Close;
end;
StatusBar1.SimpleText := 'Recordset für SQL ist geöffnet.';
end;
</pre>
Alle Datensätze werden im Memofeld eingefügt
Comment