AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Komplette Tabelle aus ner db in die andere kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komplette Tabelle aus ner db in die andere kopieren

Ein Thema von mojo777 · begonnen am 13. Sep 2005 · letzter Beitrag vom 16. Sep 2005
Antwort Antwort
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#1

Komplette Tabelle aus ner db in die andere kopieren

  Alt 13. Sep 2005, 20:48
Datenbank: interbase6 • Version: 6 • Zugriff über: normale delphi6 komponenten...
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
Muh macht die kUh
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 14. Sep 2005, 07:46
Hallo mojo,

wenn du das professionell machst, dann solltest du über Replikation nachdenken. Ansonsten ist die BDE recht hilfreich, da sie folgendes ermöglicht:

INSERT INTO :db1:table SELECT * FROM :db2:table Es existieren noch mehr oder weniger elegante Alternativen, aber da müsste man deine Anforderungen kennen - und verstehen.

Grüße vom marabu
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#3

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 15. Sep 2005, 18:43
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
Muh macht die kUh
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#4

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 15. Sep 2005, 20:58
ok.... hier meine lösung.. mehr oder weniger per hand.
Delphi-Quellcode:
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;
gruß
Muh macht die kUh
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 16. Sep 2005, 07:20
Hallo mojo,

Zitat von mojo777:
habs auch schon oft geschafft.. aber mit schleifen... das ist doof und nicht universell.
die von dir vorgestellte Lösung ist NICHT doof. Leider kann IB nicht mehrere Datenbanken in einem statement ansprechen. Als Grund wird seine "multi generational architecture" angegeben.

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
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#6

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 16. Sep 2005, 15:01
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
Muh macht die kUh
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 16. Sep 2005, 16:09
Schau dir mal die Interbase DataPump v 3.4 an.
http://www.clevercomponents.com/downloads/index.asp
siehe auch:
http://www.ibphoenix.com/main.nfs?a=...=ibp_mig_tools
Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Komplette Tabelle aus ner db in die andere kopieren

  Alt 16. Sep 2005, 16:58
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:46 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