Announcement

Collapse
No announcement yet.

Alle Sätze einer Tabelle Durchlaufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Alle Sätze einer Tabelle Durchlaufen

    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

  • #2
    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

    Working...
    X