Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Übergabe Daten aus MDB an SQL ADOQuery (https://www.delphipraxis.net/144116-uebergabe-daten-aus-mdb-sql-adoquery.html)

Micha-Z 30. Nov 2009 15:50


Übergabe Daten aus MDB an SQL ADOQuery
 
Hallo Leute,

bräuchte mal etwas Hilfe :-D

wie bekommt man das hin, das man Daten von einem Query
an ein anderes übergibt?

Ich denke das Thema gab es sicher schon oft.
Oder besser die Frage der DatenSyncronisierung.
Will jetzt auch keinen damit langweilen oder nerven.
Nur konnte ich keine Lösungsmöglichkeit finden.

Zur Zeit habe ich für beide Datenbanken eine Anbindung
über jeweils einen ADOQuery. Diese nutze ich für das anlegen
und Löschen von Spalten.

Nun suche ich eine Möglichkeit die Daten in eine Richtung
abzugleichen. Vielleicht ist die Idee für den Weg auch Mist!?
Vielleicht gibt es eine einfachere Lösung?!?! ... HILFEEee

- arbeite mit Delphi 2005
- VCL
- und ich bin Neuling

Gruß
Micha

[edit=Phoenix]Das ist mit Sicherheit kein Delphi für .NET. Geändert. Mfg, Phoenix[/edit]

sx2008 1. Dez 2009 00:35

Re: Übergabe Daten aus MDB an SQL ADOQuery
 
Du hast zwei Datenbanken (A und B) und möchtest nun den Inhalt einer Tabelle in A
mit der strukturgleichen Tabelle in Datenbank B synchronisieren,
so dass TabB den Inhalt von TabA bekommt?

Die einfachste Lösung ist den Inhalt der Tabelle in B zu löschen
und alle Daten aus A neu einzukopieren.

Es gibt noch komplizierte Verfahren:
1.) alle Datensätze in TabB löschen, die es in TabA nicht gibt
2.) alle Datensätze von TabA durchlaufen und prüfen, ob es den Datensatz in TabB gibt
Falls Datensatz nicht vorhanden: Datensatz einfügen; falls Datensatz verschieden: Datensatz in TabB updaten
Man braucht dazu zwingend einen Primärschlüssel.
Aber ein Anfänger dürfte mit der Aufgabe überfordert sein.

Micha-Z 1. Dez 2009 14:28

Re: Übergabe Daten aus MDB an SQL ADOQuery
 
Hallo "sx2008"

danke erst mal für deine Antwort !!!

die Tabelle in der DB-B löschen ( falls vorhanden )
und neu anlegen, würde zunächst mal reichen

letzteres war eher das was ich nicht hören wollte!
auch wenn es sicher berechtigt ist .... :|

könnte man es über Textboxen lösen?
in dem man aus der DB-A die Daten
in das jeweilige Feld übernimmt und sie
dann in ein "SQL UPDATE "Tabellen_Name"
SET Spalte1 = [Wert1], Spalte2 = [Wert2]"
übernimmt und in die DB-B schreibt ???

sx2008 1. Dez 2009 22:51

Re: Übergabe Daten aus MDB an SQL ADOQuery
 
Um alle Datensätze einer ADO Tabelle zu löschen:
Delphi-Quellcode:
procedure DeleteADOTable(con:TADOConnection; const tablename:string);
begin
   Assert(Assigned(con));
   con.execute('DELETE FROM '+tablename);
end;
Um einen Datensatz zu kopieren:
Delphi-Quellcode:
procedure CopyRecord(a,b:TDataset);
var
   i : integer;
   f : TField;
begin
   for i:=0 to a.fields.Count-1 do
   begin
      f := b.FindField(a.Fields[i].FieldName);
      if Assigned(f) then
         f.Value := a.Fields[i].Value;
   end;
end;
Um ALLE Datensätze zu kopieren:
Delphi-Quellcode:
procedure CopyAllRecords(a,b:TDataset);
begin
   while not a.Eof do
   begin
      b.Append; // neuen, leeren Datensatz anhängen
      CopyRecord(a,b);
      b.Post; // abschicken
      a.Next;
   end;
end;
Und jetzt noch das Ganze zusammenbauen.
Du brauchst jeweils eine ADOConnection für jede Datenbank.
1.) alte Daten löschen
Delphi-Quellcode:
DeleteADOTable(ADOConnectionA, 'MeineTabelle');
2.) zwei ADOQuerys erstellen
Delphi-Quellcode:
ADOQueryA.SQL.Text := 'SELECT * FROM MeineTabelle';
ADOQueryA.Open;
Das Gleiche für ADOQueryB und jeweils das Property Connection zuweisen.
3.) Daten kopieren
Delphi-Quellcode:
CopyAllRecords(ADOQueryA, ADOQueryB);
Das wäre so ganz grob das "Kochbuch".

Micha-Z 2. Dez 2009 15:33

Re: Übergabe Daten aus MDB an SQL ADOQuery
 
Hi sx2008

danke erst mal für deine Mühe und die vielen Infos!!!
mal schaun ob ich damit umgehen kann ...
werde es in Teilen mal testen

Gruß
Micha


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