Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten von lokaler Tabelle in Tabelle auf Server kopieren (https://www.delphipraxis.net/86516-daten-von-lokaler-tabelle-tabelle-auf-server-kopieren.html)

SilverMoonGirl 15. Feb 2007 10:29

Datenbank: PostgreSQL, dBase • Zugriff über: Query

Daten von lokaler Tabelle in Tabelle auf Server kopieren
 
Aloha :hi:

Ich habe zwei Tabellen von denen ich gerne Daten kopieren möchte.

Tabelle1, lokal, dBase
Tabelle2, Server, PostgreSQL

Über ODBC habe ich mir eine Datenquelle eingerichtet, so dass ich mir die Daten der Postgres Tabelle unter Delphi auch anzeigen lassen kann.

Also dachte ich mir, könnte man ja so machen: :mrgreen:
Delphi-Quellcode:
pfad:= 'C:\Dokumente und Einstellungen\simone\datenbank\tabelle1';
Query1.databasename:= 'PostgresTabelle';
Query1.Close;
Query1.SQL.Add('INSERT INTO Tabelle2 SELECT Spalte1, Spalte2 FROM "'+pfad+'"');
Query1.Open;
So gehts nicht und der Fehler: "Relation <Pfad Tabelle1> existiert nicht" ist eigentlich logisch, da sich die Tabelle ja nicht auf dem Server befindet.

Habt ihr vielleicht einen Tipp für mich, wie es anders geht? Mir fällt da nichts ein :oops:

mikhal 15. Feb 2007 13:00

Re: Daten von lokaler Tabelle in Tabelle auf Server kopieren
 
Zunächst: Die Methode Open darfst du nicht für Insert-, Update- und Delete-Statements verwenden. Hier musst du ExecSQL verwenden.

Lösung auf die Schnelle: Query1 für dBase, Query2 für Postgres, in einer Schleife bildest du die Insert-Anweisung mit den Feldinhalten aus Query1 in der Query2 und sendest sie mit ExceSQL (kein Post!, aber weventuell zweites Query mit Anweisung Commit) an die PostgresSQL-Datenbank.

Schema:
Delphi-Quellcode:
Query1.SQL.Text := 'SELECT Feld1, Feld2 FROM DBASE';
Query1.Open;
Query2.SQL.Text := 'INSERT INTO POSTGRES(Col1, Col2)';
Query2.SQL.Add('VALUES (:Feld1, :Feld2)';
Query3.SQL.Text := 'COMMIT';
while not Query1.Eof do
begin
  Query2.ParamByName('Feld1').AsInteger := Query1.FindField('Feld1').AsInteger;
  Query2.ParamByName('Feld2').AsString := Query1.FindField('Feld2').AsString;
  Query2.ExecSQL;
  Query3.ExecSQL;
  Query1.Next;
end;
Nicht besonders elegant, nicht besonders schnell, aber sollte funktionieren.

Grüße
Mikhal

SilverMoonGirl 15. Feb 2007 14:00

Re: Daten von lokaler Tabelle in Tabelle auf Server kopieren
 
Vielen Dank, das funktioniert :kiss:

Zitat:

Zitat von mikhal
Zunächst: Die Methode Open darfst du nicht für Insert-, Update- und Delete-Statements verwenden. Hier musst du ExecSQL verwenden.

Ich weiß, das ist der Teil, den ich mir nie merken kann. Ich merk das immer erst beim ausführen :roll:

marabu 15. Feb 2007 18:15

Re: Daten von lokaler Tabelle in Tabelle auf Server kopieren
 
Hallo,

bei einem Zugriff über die BDE wäre der Einsatz der Komponente TBatchMove naheliegend.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 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