Announcement

Collapse
No announcement yet.

DBase-Datenbank über ADO ohne BDE verwenden

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

  • DBase-Datenbank über ADO ohne BDE verwenden

    Ich möchte eine DBase Datenbank über ADO aber ohne die BDE auslesen und Verändern. Ich verwende eine D6Prof. Version ohne AdoExpress. Muß ich hierzu eine besondere Komponente installieren? Hat vielleicht jemand ein einfaches Bsp. für die Anzeige einer DBase Tabelle in z.B. DBGrid?

    Vorab Danke
    Ralf

  • #2
    Hallo,

    die Komponenten aus <i>ADO Express</i> werden nur dann benötigt, wenn eine Anbindung über TDataSource an die Datensteuerungskomponenten wie TDBEdit oder TDBGrid erfolgen soll. Wenn ADO Express (oder vergleichbare Komponenten) nicht zur Verfügung steht, bleibt das TDBGrid außen vor. Allerdings gibt es da ja auch noch das TStringGrid, so dass man mit jeder Delphi-Version direkt auf die nativen COM-Objekte von ADO zugreifen kann (ich greife dabei über <i>uses ADODB_TLB</i> auf die importierte Typbibliothek von ADO zurück):
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);
    var
    aCon : _Connection;
    aRS : _Recordset;
    iRow, iCol : Integer;
    begin
    aCon := CoConnection.Create;
    aCon.Open(cCS, '', '', adConnectUnspecified);
    try
    aRS := CoRecordset.Create;
    aRS.CursorLocation := adUseClient;
    aRS.Open('SELECT CustomerID, CompanyName, City FROM Customers',
    aCon, adOpenStatic, adLockReadOnly , 0);
    try
    StringGrid1.Cells[1, 0] := aRS.Fields[0].Name;
    StringGrid1.Cells[2, 0] := aRS.Fields[1].Name;
    StringGrid1.Cells[3, 0] := aRS.Fields[2].Name;
    iRow := 1;
    while not aRS.EOF do
    begin
    StringGrid1.Cells[0, iRow] := IntToStr(iRow);
    for iCol := 0 to 2 do
    StringGrid1.Cells[iCol + 1, iRow] := aRS.Fields[iCol].Value;
    Inc(iRow);
    aRs.MoveNext
    end;
    finally
    aRS.Close;
    aRS := nil;
    end;
    finally
    aCon.Close;
    aCon := nil;
    end;
    end;
    </pre>
    Nachdem die Ergebnismenge der SELECT-Abfrage feststeht, fülle ich die erste Zeile im TStringGrid mit den Spaltennamen, um dann alle Felder der Ergebnismenge in einer Schleife auszulesen und im TStringGrid einzutragen.

    Auf die gleiche Art und Weise werden die Felder der Tabelle aktualisiert, indem der neue Wert der Field-Eigenschaft Value zugewiesen und mit <b>Update</b> bestätigt wird.
    <pre>
    aRS.Fields[1].Value := EditNew.Text;
    aRS.Update(EmptyParam, EmptyParam);
    </pre>
    Ab Delphi 6 sind die ADO Express-Komponenten unter dem neuen Namen <b>dbGo</b> auch in der <b>Professional</b>-Version von Delphi verfügbar (siehe Komponenten auf der Palettenseite <i>ADO</i>). Hier vereinfacht sich das Ganze: <br>
    1. TADOConnection konfigurieren und aktivieren<br>
    2. TADODataSet mit TADOConnection verbinden <br>
    3. TADODataSet konfigurieren/öffnen <br>
    4. TDataSource mit TADODataSet verbinden <br>
    5. TDBGrid mit TDataSource verbinden

    Comment


    • #3
      Hallo Hr. Kosch,

      ich habe die ADO Express-Version ausprobiert. Bei *.MDB funktioniert es wunderbar. Ich habe es dann mal mit einer *.dbf probiert. Hat bei mir nicht funktioniert.
      Was für einen Provider muß ich bei der ADOConnection verwenden? Ich habe in einem Ihrer Kommentare gelesen, dass der MS Jet4.0 Ole DB Provider auch DBase verwenden kann. Ist das richtig? und wenn ja wie muß ich ihn konfigurieren?

      Vorab schon mal herzlichen Dank

      Ral

      Comment


      • #4
        Hallo,

        für den Zugriff auf eine dBASE-Tabelle gibt es für ADO 2 Optionen: <br>
        a) ODBC-DSN, oder <br>
        b) Microsoft Jet Engine

        Im Fall der Microsoft Jet Engine sieht die Konfiguration wie folgt aus: <br>
        1. TADOConnection ablegen, mit Doppelklick Dialog öffnen <br>
        2. Verbindungsstring aufbauen <br>
        3. Microsoft Jet 4.0 OLE DB Provider auswählen <br>
        4. Registerseite <b>Verbindung</b>: Eingabefeld <i>Datenbanknamen</i>: Verzeichnis der dBASE-Dateien eintragen<br>
        (Beispiel: C:\Programme\Gemeinsame Dateien\Borland Shared\Data\) <br>
        5. Registerseite <b>Alle</b>: Eintrag <b>Extended Properties</b>: Wert <i>dBASE 5.0</i> eintragen <br>
        6. Objektinspektor: TADOConnection.LoginPrompt = False <br>
        7. Objektinspektor: TADOConnection.Connected = True<br>
        8. TADODataSet mit TADOConnection verbinden, usw....

        Comment


        • #5
          Hallo Hr. Kosch,

          habe es jetzt endlich ausprobiert. Funktioniert wunderbar.

          Danke

          Ral

          Comment

          Working...
          X