Einzelnen Beitrag anzeigen

SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
313 Beiträge
 
Delphi 12 Athens
 
#6

AW: FoxPro-DB lesen und Datensätze bearbeiten

  Alt 23. Jul 2018, 16:21
Ich hatte letztes Jahr ein kleines Tool für eine Datenübernahme aus FoxPro geschrieben um automatisiert alle Datensätze in csv-Dateien zu exportieren.
Das funktioniert definitiv mit ADO. Den ConnectionString und die Verbindung zur DB hast du ja bereits aufgebaut. Jetzt brauchst du eigentlich nur noch einen
ADOTable, eine Data Source und ein DBGrid. Alles miteinander verbinden und der Zugriff sollte problemlos möglich sein.

Ja,... mit dem "alles miteinander verbinden" haperts noch - ich bin mit Datenbanken der totale Anfänger und erziele gelegentlich Glückstreffer .

Kann es sein daß die Komponenten für den Datenzugriff überhaupt nichts mit den dbGo-Komponenten gemeinsam haben?

- Ich habe eine TADOConnention, TADODataset, TADOQuery, TDataSource, TDBGrid und TDBNavigator auf dem TForm.
- Ich scheine ja eine Verbindung im OI zusammengeklickt zu haben:
Code:
   ADOconnection1.Provider = VFPOLEDB.1
   ADODataSet1.DataSource = DataSource1
   ADOQuery1.Connection = ADOConnection1
   ADOQuery1.DataSource = DataSource1

   DataSource1.DataSet = (leer, ich kann da nichts eintragen, versuche ich es per Code, sagt es was von "zirkulär"-Fehler)
   ADOTable1.Connection = ADOConnection1
   ADOTable1.MasterSource = DataSource1
   ADOTable1.TableName habe ich den Namen der Datenbank-Tabelle eingegeben
   DBGrid1.DataSource = DataSource1
   DBNavigator1.DataSource = DataSource1 (sind aber immer alle Buttons grau)
Testweise habe ich einen SQL-Script angewandt und auch mit unterschiedlichen Artikelnummern andere Ergebnisse bekommen:
Delphi-Quellcode:
   SQLstring:='select artnr, artsuch, seriennr from tabelle1 where (artnr="0815")';
   AdoDataset1.CommandText:=SQLstring;
   AdoDataset1.Active:=true;
   showmessage('Gibt '+AdoDataset1.RecordCount.ToString+' Einträge');
Vorhin hab ich entdeckt, daß ich auch sowas machen kann:
Delphi-Quellcode:
// nur nötig, wenn SQLExec verwendet wird: ADOConnention1.open;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add(SQLstring);
  ADOQuery1.Active:=true;
  showmessage('Gibt '+ADOQuery1.RecordCount.ToString+' Einträge');
Wichtig scheint, daß das .Active NACH der SQLstring-Zuweisung erfolgt.

Was ist denn der bessere Weg - mit dem AdoDataset1.active das SQL "schicken" oder mit dem AdoQuery1.active?
Wozu ist AdoQuery1.ExecSQL - es geht doch schon mit dem .active:=true los!?

Meine Hoffnung war daß mir das Ergebnis meines Query automatisch in der TDBGrid angezeigt wird (so als erstes Erfolgserlebnis)...
  Mit Zitat antworten Zitat