![]() |
Datenbank: interbase6 • Version: 6 • Zugriff über: normale delphi6 komponenten...
Komplette Tabelle aus ner db in die andere kopieren
Hallo liebe Gemeinde!
Hab mich heute gefragt obs möglich ist eine kopmlette tabelle aus einer datenbak (ib6) in die andere (auch ib6) zu kopieren. eine ist remote, die andere lokal. ok.. mölgich ist es. habs auch shcon oft geschafft.. aber mit schleifen... das ist doof und nicht universell. kennst wer vll eine schnelle und elegante möglichkeit eine art "datapump" zu erzeugen? vielen DANK! gruß mojo |
Re: Komplette Tabelle aus ner db in die andere kopieren
Hallo mojo,
wenn du das professionell machst, dann solltest du über Replikation nachdenken. Ansonsten ist die BDE recht hilfreich, da sie folgendes ermöglicht:
SQL-Code:
Es existieren noch mehr oder weniger elegante Alternativen, aber da müsste man deine Anforderungen kennen - und verstehen.
INSERT INTO :db1:table SELECT * FROM :db2:table
Grüße vom marabu |
Re: Komplette Tabelle aus ner db in die andere kopieren
hi, hmm... kann mir irgendwie nicht so wirklich vorstellen, wie das funktionieren soll....
denn wenn ich eine sql-anfrage ausführen lasse, dann ist diese doch immer auf eine datenbank bezogen... und in welcher form gebe ich db1 und db2 an? 127.0.0.1:c:\db\file1.gdb und 127.0.0.1:c:\db\file2.gdb?? da sind aber doch noch die benutzerrechte etc... *verwirrt*.... kannst du mir vll einen link oder sogar eine buchepfehlung geben, welches das thema anreißt? vielen dank! mfg |
Re: Komplette Tabelle aus ner db in die andere kopieren
ok.... hier meine lösung.. mehr oder weniger per hand.
Delphi-Quellcode:
gruß
implementation
procedure TfmMain.replicateTable(quelle,ziel:String); var i, j:integer; inpFelder, outpFelder, sql, werte:String; begin dmData.repl_global.sql.clear; dmData.repl_global.sql.add('SELECT * FROM '+quelle); try dmData.repl_global.open; dmData.repl_global.FetchAll; dmData.repl_global.first; dmData.repl_local.sql.clear; dmData.repl_local.sql.add('DELETE FROM '+ziel); dmData.repl_local.ExecSQL; inpFelder:=dmData.repl_global.Fields[0].DisplayName; for i:=1 to dmData.repl_global.FieldCount-1 do //feldnamen vorbereiten begin inpFelder:=inpFelder+', '+(dmData.repl_global.Fields[i].DisplayName); end; for i:=1 to dmData.repl_global.RecordCount do //kopieren begin werte:=dmData.repl_global.fields[0].AsString; for j:=1 to dmData.repl_global.FieldCount-1 do begin if dmData.repl_global.fields[j].AsString='' then werte:=werte+', null' else werte:=werte+', '''+trim(dmData.repl_global.fields[j].AsString)+''''; end; dmData.repl_local.SQL.Clear; dmData.repl_local.sql.add('INSERT INTO '+ziel+' ('+inpFelder+') '+ ' VALUES ('+werte+')'); try dmData.repl_local.ExecSQL; except errlog.lines.add(dmData.repl_local.sql.text); errlog.lines.add(werte); end; dmData.repl_global.Next; end; except end; end; |
Re: Komplette Tabelle aus ner db in die andere kopieren
Hallo mojo,
Zitat:
Die von mir erwähnte Lösung auf Basis der BDE wollte ich soeben implementieren - und bin gescheitert. Ich hätte besser LOCALSQL anstelle BDE schreiben sollen, denn die spezielle Tabellenreferenz für einen heterogenen Join wird nur für die lokalen Datenbanken umgesetzt. Bei Gelegenheit werde ich prüfen, ob das Kopieren mit Hilfe einer in memory table Vorteile bringt. Freundliche Grüße marabu |
Re: Komplette Tabelle aus ner db in die andere kopieren
hmm. ok. dann werde ich mich vorerst mit meiner schleife begnügen müssen. danke für die antworten!
das was mir dabei sorgen bereitet ist, das programm, aus welchem der ausschnitt hier zu sehen ist wird auf einem leistungsschwachen prozessor laufen und da befürchte ich, dass wenn dann über 5000 datensätze gibt, das system in die knie geht. :-( auf welcher basis funtioniert eigenltich sql von interbase? ;-) weiss wer in welcher sprache es geschrieben ist? :-) mfg mojo |
Re: Komplette Tabelle aus ner db in die andere kopieren
Schau dir mal die Interbase DataPump v 3.4 an.
![]() siehe auch: ![]() |
Re: Komplette Tabelle aus ner db in die andere kopieren
Mojo, soweit ich das verstehe hast du Benutzer- und Betriebsfunktionen im gleichen Programm. Kannst du den Betriebsanteil (Tabelle kopieren) nicht in einen eigenen Prozess auslagern? Eventuell kannst du die Tabelle auf der anderen Seite aus der Backup-Datei erzeugen, die du nachts erstellst (gbak -O, restore table by table). Interbase wurde übrigens in C implementiert. Was du mit Basis von SQL meinst, verstehe ich leider nicht.
Und vergiss die Replikation nicht (z.B. IB Replicator). marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 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