![]() |
Datenbank: FoxPro • Version: 9 • Zugriff über: ADO
FoxPro-DB lesen und Datensätze bearbeiten
Hallo,
ich möchte in eine (durch eine FoxPro-Anwendung in Verwendung befindliche) Datenbank mit einem Delphiprogramm ebenfalls zugreifen und Datensätze bearbeiten. Die Datenbank-Datei liegt zwar auf dem Server, aber ich kann sie auch über X:\Db\blabla.dbf erreichen, kopieren, mit dem Hexeditor öffnen... obwohl sie im Zugriff durch andere Nutzer sein kann. Darin möchte ich nun Datensätze einlesen und editieren können. Ich vermute mal, daß ich das mit den ADO-Komponenten in "Delphi Berlin Professional" machen kann, aber würde auch FireDAC gehen? (in der Pro "nur lokal" - ich kann die Datei ja über den Pfad erreichen; ist das 'lokal genug'?) Im OI habe ich für die ADOConnention1.Provider = VFPOLEDB eingestellt. Ich habe lange gebraucht, um eine Verbindung herzustellen - eine DBF-Datei reicht ja nicht, es muss (zumindest im vorhandenen Projekt, weiß nicht ob das immer so ist) übergeordnet eine .DBC,.DCT und .DCX-Datei da sein und neben der .DBF habe ich noch .CDX und .FPT entdeckt; eigentlich wollte ich ja nur die .DBF bearbeiten... ok, die Verbindung wurde erfolgreich hergestellt im Test. Ich würde gerne in einem Grid zunächst schon mal die Datensätze ansehen können... -TADOtable hat kein Grid, obwohl das Icon danach aussieht -TADOQuery auch nicht Wie mache ich jetzt weiter? |
AW: FoxPro-DB lesen und Datensätze bearbeiten
Wenn ich mich richtig erinnere, ist Foxpro im Grunde nichts anderes, als dBase.
Vielleicht hilft dir ![]() Ach, gerade gesehen. Die Verbindung hast du ja schon. Zum Anzeigen brauchst du noch ein TDBGrid und TDataSource. |
AW: FoxPro-DB lesen und Datensätze bearbeiten
Ah, hm...
In der DataSource muss ich DataSet angeben. Was kommt da rein - das Auswahlfeld ist leer :? Ich habe ADODataSet1, aber es zeigt es mir nicht an. |
AW: FoxPro-DB lesen und Datensätze bearbeiten
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. |
AW: FoxPro-DB lesen und Datensätze bearbeiten
Table- und Query-Komponenten sind von TDataset abgeleitet.
TDBGrid --> TDataSource --> TTable |
AW: FoxPro-DB lesen und Datensätze bearbeiten
Zitat:
Ja,... mit dem "alles miteinander verbinden" haperts noch - ich bin mit Datenbanken der totale Anfänger und erziele gelegentlich Glückstreffer :cry:. Kann es sein :gruebel: 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:
Testweise habe ich einen SQL-Script angewandt und auch mit unterschiedlichen Artikelnummern andere Ergebnisse bekommen:
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)
Delphi-Quellcode:
Vorhin hab ich entdeckt, daß ich auch sowas machen kann:
SQLstring:='select artnr, artsuch, seriennr from tabelle1 where (artnr="0815")';
AdoDataset1.CommandText:=SQLstring; AdoDataset1.Active:=true; showmessage('Gibt '+AdoDataset1.RecordCount.ToString+' Einträge');
Delphi-Quellcode:
Wichtig scheint, daß das .Active NACH der SQLstring-Zuweisung erfolgt.
// 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'); 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 :stupid: daß mir das Ergebnis meines Query automatisch in der TDBGrid angezeigt wird (so als erstes Erfolgserlebnis)... |
AW: FoxPro-DB lesen und Datensätze bearbeiten
Nein, so geht das nicht! Lass mal die Zuweisungen der DataSource bei den DataSets weg:
Zitat:
|
AW: FoxPro-DB lesen und Datensätze bearbeiten
Ooh.. so herum also.
Dankeschön, jetzt hab ich Daten in der Tabelle :thumb: :bounce2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz