Entwickler-Ecke

Datenbanken - Synchronisation Mysql Server/Client


cyberax - Do 13.09.07 18:16
Titel: Synchronisation Mysql Server/Client
Hallo,

ich möchte eine Synchronisation zwischen einem Lokalen Server und einem Online Server durchführen(lassen).

Dafür gibt es auch Tools, aber ich wollte das gern selbst gestallten.
So ungefähr sieht mein Code dafür aus:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 
...

ZQuery_artserv.sql.Text:='SELECT artikelname, beschreibung, lagerbestand, artbestnr, dyn_kat, barcode, brutto_preis, sangebot, bild2, bild3, bild4, bild5,'+
            'online, neuheit, lieferbar, explo, online_beschreibung, anzahl_bestellungen,lstatus from artikel where nr = :wert';

 repeat
  meldungen.label1.caption:='Noch '+inttostr(x)+' von '+inttostr(ges)+' Datensätzen werden verglichen...';
  Application.ProcessMessages;
  ZQuery_artserv.parambyname('wert').asinteger:= ZQuery_artclient.fieldbyname('nr').asinteger;
  ZQuery_artserv.open;
  if ZQuery_artserv.fieldbyname('artikelname').AsString <> ZQuery_artclient.fieldbyname('artikelname').AsString then
  begin
   if not(ZQuery_artclient.state in [dsedit, dsinsert]) then ZQuery_artclient.edit;
   ZQuery_artclient.fieldbyname('artikelname').AsString:=ZQuery_artserv.fieldbyname('artikelname').AsString;
  end;
...

Ich öffnen also erst mit einem Query die Artikeltabelle auf dem Server und mit dem anderen Query die vom Client. Nun gehe ich Datensatz für Datensatz durch und vergleiche/ändere. Das Vergleichen bzw. Ändern geht schnell, aber das Laden des Client-query dauert immer ewig.

Bestimmt handhabe ich das mit dem Parameter/der Übergabe falsch.

könnt ihr mir bitte mal weiter helfen?

Gruß cyberax


cyberax - Do 13.09.07 18:22

Ach falsch...

ich arbeite mit query.Refresh und das dauert immer ewig. Wenn ich query.open verwendet, dann "öffnet" er nicht den neuen/nächsten Datensatz.. ?!?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
...  

 
ZQuery_artserv.sql.Text:='SELECT artikelname, beschreibung, lagerbestand, artbestnr, dyn_kat, barcode, brutto_preis, sangebot, bild2, bild3, bild4, bild5,'+  
            'online, neuheit, lieferbar, explo, online_beschreibung, anzahl_bestellungen,lstatus from artikel where nr = :wert';  

  ZQuery_artserv.parambyname('wert').asinteger:= ZQuery_artclient.fieldbyname('nr').asinteger;  
  ZQuery_artserv.open;  
repeat  
  meldungen.label1.caption:='Noch '+inttostr(x)+' von '+inttostr(ges)+' Datensätzen werden verglichen...';  
  Application.ProcessMessages;  
  ZQuery_artserv.parambyname('wert').asinteger:= ZQuery_artclient.fieldbyname('nr').asinteger;  
  ZQuery_artserv.refresh;  
  if ZQuery_artserv.fieldbyname('artikelname').AsString <> ZQuery_artclient.fieldbyname('artikelname').AsString then  
  begin  
   if not(ZQuery_artclient.state in [dsedit, dsinsert]) then ZQuery_artclient.edit;  
   ZQuery_artclient.fieldbyname('artikelname').AsString:=ZQuery_artserv.fieldbyname('artikelname').AsString;  
  end;  
...