Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Daten aus TQuery in TADOQuery verwenden (https://www.delphipraxis.net/176858-daten-aus-tquery-tadoquery-verwenden.html)

Vis 1. Okt 2013 08:31

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

sx2008 1. Okt 2013 09:12

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:
// 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;
Dazu gehört eine Schleife über alle Datensätze:

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;

Vis 1. Okt 2013 10:22

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

jobo 1. Okt 2013 10:45

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:
insert into ":BDE_ALIAS2SERVER:MyDestTable" (field1, .., field10)
select field1, .., field10
  from MyPdxSourceTable.db
einfügen.
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:
http://www.delphipraxis.net/171624-w...en-sollte.html

Vis 1. Okt 2013 13:19

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?

jobo 1. Okt 2013 14:05

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.

nahpets 1. Okt 2013 14:16

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.

Vis 1. Okt 2013 14:50

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

Vis 2. Okt 2013 07:06

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

jobo 2. Okt 2013 07:33

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 20:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz