AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Daten aus TQuery in TADOQuery verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus TQuery in TADOQuery verwenden

Ein Thema von Vis · begonnen am 1. Okt 2013 · letzter Beitrag vom 8. Okt 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Vis
Vis

Registriert seit: 26. Apr 2013
26 Beiträge
 
Delphi XE8 Professional
 
#1

Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 09:31
Datenbank: MS Server • Version: 2008 • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 10:12
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;
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Vis
Vis

Registriert seit: 26. Apr 2013
26 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 11:22
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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 11:45
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
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Vis
Vis

Registriert seit: 26. Apr 2013
26 Beiträge
 
Delphi XE8 Professional
 
#5

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 14:19
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?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 15:05
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.
Gruß, Jo
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 15:16
Ü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.
  Mit Zitat antworten Zitat
Benutzerbild von Vis
Vis

Registriert seit: 26. Apr 2013
26 Beiträge
 
Delphi XE8 Professional
 
#8

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 1. Okt 2013, 15:50
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
  Mit Zitat antworten Zitat
Benutzerbild von Vis
Vis

Registriert seit: 26. Apr 2013
26 Beiträge
 
Delphi XE8 Professional
 
#9

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 2. Okt 2013, 08:06
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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Daten aus TQuery in TADOQuery verwenden

  Alt 2. Okt 2013, 08:33
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
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