Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen (https://www.delphipraxis.net/136022-zeos-mysql-und-replace-into-wollen-nicht-zusammen.html)

c-bob 22. Jun 2009 12:19

Datenbank: MYSQL • Version: 5 • Zugriff über: ZEOS (aktuelle Version)

ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Hallo DP'ler!

Wieder ein Problem, das sicherlich irgendwie am fehlenden Verständnis für die ganze DB-Geschichte krankt! Ich blick da noch nicht ganz durch.
Folgendes Szenario:

zu Anfang:
DB1: extern, Mysql, per
Delphi-Quellcode:
db1Qry.SQL:='SELECT * ...'
daten geholt, liegen unterhalb von
Delphi-Quellcode:
db1DataSource.DataSet.xxx
jetzt
DB2: lokal, Mysql, will per SQL-Statement
SQL-Code:
Replace INTO db.tab (a,b,c) Values ('xx','xx','xx')
, was ich aus
Delphi-Quellcode:
db1DataSource.DataSet.xxx
auslese und per Hand (also Schleife) als einen langen string zusammen baue. die Datenbank quasi updaten.

Nun sagt er mir aber bei der Ausführung, das angeblich ein fehler im Statemenst sein soll. Es sieht aber ganz sauber aus und ich habs auch schon herauskopiert und bspw. mit HeidiSQL getestet - Statement müßte sauber sein:
SQL-Code:
REPLACE INTO `db`.`tab` (`id`, `date`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`) VALUES (109752,'2009-06-22 08:15:00','17','89','13','4','2','358.48','0.050621','0','56','4.','0','0') ;
Woran kann das liegen? habe ich die lokale DB nicht richtig konstruiert? oder geht das garnicht mit einem normalen 'TZQuery'? Muss ich da irgendwas über 'TZUpdateSQL' etwas machen?

Grüße
-C-

jfheins 22. Jun 2009 12:32

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Da ich von REPLACE noch nichts gehört hatte, hab ich mal nachgeschlagen:
Zitat:

REPLACE ist eine MySQL-Erweiterung zum SQL-Standard. Es kann Datensätze einfügen, oder es kann Datensätze löschen und einfügen. Wenn Sie eine Anweisung suchen, die dem SQL-Standard entspricht und die entweder einfügt oder aktualisiert, dann benutzen Sie die INSERT ... ON DUPLICATE KEY UPDATE-Anweisung
Hast du es damit schonmal probiert?

c-bob 22. Jun 2009 20:33

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Hallo Julius!

Ja, die Passage aus der MySQLHilfe hab ich auch schon entdeckt. Da liegt aber wohl nicht der Fehler.
Ich habe nun herausgefunden, dass entweder die ZEOSLib nicht mit zusammenhängenden Statements a-la
SQL-Code:
ALTER TABLE blablub ...;INSERT INTO blala ...; ALTER TABLE buhbuh...;
zurecht kommt, oder aber ich hab etwas falsch gemacht beim auffüllen von
Delphi-Quellcode:
Query.SQL.Text
bzw. mit
Delphi-Quellcode:
Query.SQL.Add
wobei ich daran aber nicht glaube, da da ja eigentlich nix falsch zu machen ist. ich habe auch alle Statements brav mit ";" abgeschlossen. Half nix. Es wurde immer eine Exception geraised (schönes D-Englisch :lol: ).
Dabei half mir der ZSQLMonitor - kein schlechtes Ding zum debuggen.
Ich habe die dann jeweils einzeln abgesetzt und dann ging es.

Aber ich bin generell nicht zufrieden, da ich glaube, dass ich das alles etwas umständlich gemacht habe. Es geht ja prinzipiell darum, eine entfernte DB mit der localen zu synchronisieren. Dabei soll dann auch gleichzeitig noch in die entfernte eine Art Statusmeldung zurück gegeben werden. Diese ist allerdings recht simpel gehalten. Mir gehts eher um den Datenabgleich.
Ich habe ja von dem ersten Query ein aufgefülltes TDataSource. Aber wie gesagt, aus dem bau ich dann quasi per Hand ein SQL-Statement, um damit die lokale DB zu befüllen. Das muss doch aber auch irgendwie anders gehen, oder?

Gruß
-C-

mkinzler 22. Jun 2009 20:34

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Dann lasse dir das SQL-Statement mal anzeigen

c-bob 22. Jun 2009 20:41

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
@mkinzler:

hab ich ja gemacht. Ich hab's mir dann eins zu eins herauskopiert (Copy'n'Paste) und mit nem MySQL-Frontend als zusammenhängendes Statement ausgeführt - da ging es ohne Probleme.

mkinzler 22. Jun 2009 20:44

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Vielleicht wird dieser Befehl vom (SQL-)Parser von Zeos halt noch nicht unterstützt

c-bob 22. Jun 2009 21:30

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Hm, kann nicht sein, da ja die einzelne Abgabe der Statements klappt.
Ausserdem hab ich das einfach auch mit zwei "ALTER Table...;ALTER Table...;" versucht - hatte auch nicht geklappt.
Vielleicht ist es ja ein stino Tipfehler Bug, der ja durchaus auch mal vorkommen kann.

mkinzler 22. Jun 2009 21:37

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Ach das bezog sich auf das Skript. Dieses kannst du nicht mit einer normalen Query-Kompo ausführen. dafür gibt es TZSQLProcessor

sx2008 22. Jun 2009 22:47

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
SQL-Code:
REPLACE INTO `db`.`tab` (`id`, `date`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`) VALUES (109752,'2009-06-22 08:15:00','17','89','13','4','2','358.48','0.050621','0','56','4.','0','0') ;
Fehler: Tabellen- und Feldnamen dürfen in SQL/92 mit doppelten Anführungszeichen gequotet werden.
Du aber verwendest das Akzentzeichen (accent grave) `.
Keine Ahnung warum das immer mal wieder falsch gemacht wird...

DeddyH 22. Jun 2009 23:19

Re: ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
 
Zitat:

Zitat von sx2008
SQL-Code:
REPLACE INTO `db`.`tab` (`id`, `date`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`) VALUES (109752,'2009-06-22 08:15:00','17','89','13','4','2','358.48','0.050621','0','56','4.','0','0') ;
Fehler: Tabellen- und Feldnamen dürfen in SQL/92 mit doppelten Anführungszeichen gequotet werden.
Du aber verwendest das Akzentzeichen (accent grave) `.
Keine Ahnung warum das immer mal wieder falsch gemacht wird...

Weil phpMyAdmin das so vormacht ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.
Seite 1 von 2  1 2      

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