![]() |
Datenbank: MS Server • Version: 2008 • Zugriff über: ADO
Daten aus TQuery in TADOQuery verwenden
Hallo zusammen.
Ich möchte gerne die Daten aus einer Pdox-Tabelle, die ich mit TQuery abfrage daraufhin mit einer TADOQuery in eine Tabelle auf dem MS Server schreiben. Ich hatte gehofft, dass das mit der Eigenschaft TADOQuery.Datasource geht. Werde aber aus der Delphi Hilfe nicht recht schlau. Kann mir jemand helfen? Zur Info: PdoxTabelle -> TQuery -> TDatasource -> TADOQuery -> SQL-Tabelle Grüße |
AW: Daten aus TQuery in TADOQuery verwenden
so einfach geht das nicht.
Du musst die Daten Feld für Feld und Datensatz für Datensatz kopieren. Hier erst mal eine Prozedur die einen Datensatz kopiert: Der Parameter TagMask dient dazu ggf. gezielt einzelne Felder vom Kopieren auszunehmen. (Parameter kannst du ignorieren)
Delphi-Quellcode:
Dazu gehört eine Schleife über alle Datensätze:
// Kopiert gleichnamige Felder von Src nach Dst
procedure CopyDataSetRecord(Src,Dst: TDataSet; TagMask:Integer=0); var i: Integer; fSrc,fDst: TField; begin for i := 0 to Src.FieldCount-1 do begin fSrc := Src.Fields[i]; fDst := Dst.FindField(fSrc.FieldName); if Assigned(fDst) and ((fSrc.Tag and TagMask)=0) then begin fDst.Value := fSrc.Value; end; end; end;
Delphi-Quellcode:
while not Query1.Eof do
begin AdoQueryZiel.Append; // neu leeren Datensatz anhängen CopyDataSetRecord(Query1, AdoQueryZiel); // befüllen AdoQueryZiel.Post; // und wegschreiben Query1.Next; // zum nächsten Datensatz end; |
AW: Daten aus TQuery in TADOQuery verwenden
Ok, das leuchtet mir ein und funktioniert. Bzw. habe ich statt der ADOQuery einen ADOTable genommen.
Der direkte Zugriff auf die Daten der Datasource funktioniert also nicht so einfach |
AW: Daten aus TQuery in TADOQuery verwenden
ADO und Paradox / BDE sind verschiedene Welten.
Wenn Du die Daten nicht bearbeiten musst, kannst Du alles in einem Schritt mit einer TQuery machen. Du brauchst nur eine ODBC Verbindung zu MS SQL und kannst die Daten mit:
Code:
einfügen.
insert into ":BDE_ALIAS2SERVER:MyDestTable" (field1, .., field10)
select field1, .., field10 from MyPdxSourceTable.db Diese Lösung ist limitiert durch die SQL Fähigkeit der BDE, aber immerhin, die BDE beherrscht wie Access heterogene Abfragen (die nicht mal lahm sein dürften). Was aber mittlerweile wohl in Vergessenheit geraten ist. Die TQuery muss auf das richtige WorkDir Alias zeigen, wo die PDx Table liegt. Ansonsten verweise ich hier mal spaßeshalber auf meinen eigenen Lieblingsthread: ![]() |
AW: Daten aus TQuery in TADOQuery verwenden
Ok. Mir ist nur nicht ganz klar wie ich die ODBC Verbindung hinbekomme.
Ich kann ja eine ADOConnection mit ODBC aufbauen und dann mit ADOQuery eine SQL Abfrage ausführen. Aber wie kann ich mit TQuery mit einer ODBC Verbindung arbeiten? Geht das mit TDatabase? |
AW: Daten aus TQuery in TADOQuery verwenden
TQuery benutzt die BDE, die BDE kapselt automatisch alle bestehenden ODBC Verbindungen. Praktischerweise definiert man die gewünschte ODBC Verbindung im ODBC Manager und verwendet sie (als Datenbank Alias). (Das kann man glaub ich auch programmatisch machen).
ADO benutzt Du dafür gar nicht. |
AW: Daten aus TQuery in TADOQuery verwenden
Über ODBC kannst Du auch auf Paradox zugreifen und den so eingerichteten ODBC-Treiber in der ADO-Verbindung nutzen, so dass Du beide Datenbanken per ADO ansprechen kannst.
Alternativ kannst Du Dir für den SQL-Server eine ODBC-Datenquelle anlegen, die von der BDE genutzt werden kann und damit kannst Du dann beide Datenbanken über die BDE ansprechen. Für die Übernahme der Daten von Paradox in den SQL-Server halte ich die BDE-Lösung für nutzbar, sofern es keine dauerhafte Lösung für einen Produktivbetrieb sein soll, sondern nur für die einmalige Übernahme. Falls es eine dauerhafte Lösung werden soll, so ist die reine ADO-Lösung vorzuziehen. So schön und praktisch die Arbeit mit der BDE auch sein mag, leider ist sie veraltet und man weiß nicht, wie lange die BDE noch mit neueren Windowsversionen funktionieren wird. |
AW: Daten aus TQuery in TADOQuery verwenden
Ok. Langsam lichtet sich der Dschungel. Unter Systemsteuerung gibts ja dieses odbc32
Muss mich auf jeden Fall noch etwas mit ODBC beschäftigen. Werd dann nochmal schreiben. Danke soweit |
AW: Daten aus TQuery in TADOQuery verwenden
Guten morgen.
Hab jetzt mal beide Wege ausprobiert. Für die ADO-Variante hab ich eine ODBC-Verbindung mit Paradox erstellt ("Microsof Paradox Driver (*.db)"). Damit kann ich wunderbar auf die Paradox-Tabelle zugreifen. Allerdings weiß ich nicht ob mich das überhaupt weiterbringt. Wie bekomme ich die Daten jetzt ohne großen Code auf den SQL Server? Zur BDE-Variante. Hab eine ODBC-Verbindung zum SQL Server erstellt und die Verbindung als DatabaseName der TQuery eingetragen. So kann ich dann die Daten einer SQL-Tabelle anzeigen und verändern. Wenn ich allerdings auf eine lokale Paradox-Tabelle zugreifen möchte hab ich noch Probleme mit den Pfadangaben. Folgender SQL-String: SELECT * FROM 'C:\temp\PdoxTabelle.DB' endet mit der Fehlermeldung: "Allgemeiner SQL-Fehler. Incorrect syntax near 'C:\temp\PdoxTabelle.DB'" Muss ich da einen Datenbankalias erstellen? Gibt es das noch bei XE3? Über Hilfe wäre ich dankbar. Grüße |
AW: Daten aus TQuery in TADOQuery verwenden
Das habe ich oben geschrieben. Die Query läuft auf deinem lokalen Pdx Work dir. Das müsstest Du in die Database eintragen.
Den RemoteServer sprichst Du nur über den Alias im SQL an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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-2025 by Thomas Breitkreuz