AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen
Thema durchsuchen
Ansicht
Themen-Optionen

ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen

Ein Thema von c-bob · begonnen am 22. Jun 2009 · letzter Beitrag vom 23. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
c-bob

Registriert seit: 11. Jun 2009
12 Beiträge
 
#1

ZEOS, MySQL und 'REPLACE INTO' wollen nicht zusammen

  Alt 22. Jun 2009, 12:19
Datenbank: MYSQL • Version: 5 • Zugriff über: ZEOS (aktuelle Version)
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 db1Qry.SQL:='SELECT * ...' daten geholt, liegen unterhalb von db1DataSource.DataSet.xxx jetzt
DB2: lokal, Mysql, will per SQL-Statement Replace INTO db.tab (a,b,c) Values ('xx','xx','xx') , was ich aus 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:
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-
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

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

  Alt 22. Jun 2009, 12:32
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?
  Mit Zitat antworten Zitat
c-bob

Registriert seit: 11. Jun 2009
12 Beiträge
 
#3

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

  Alt 22. Jun 2009, 20:33
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 ALTER TABLE blablub ...;INSERT INTO blala ...; ALTER TABLE buhbuh...; zurecht kommt, oder aber ich hab etwas falsch gemacht beim auffüllen von Query.SQL.Text bzw. mit 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 ).
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-
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 22. Jun 2009, 20:34
Dann lasse dir das SQL-Statement mal anzeigen
Markus Kinzler
  Mit Zitat antworten Zitat
c-bob

Registriert seit: 11. Jun 2009
12 Beiträge
 
#5

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

  Alt 22. Jun 2009, 20:41
@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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 22. Jun 2009, 20:44
Vielleicht wird dieser Befehl vom (SQL-)Parser von Zeos halt noch nicht unterstützt
Markus Kinzler
  Mit Zitat antworten Zitat
c-bob

Registriert seit: 11. Jun 2009
12 Beiträge
 
#7

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

  Alt 22. Jun 2009, 21:30
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 22. Jun 2009, 21:37
Ach das bezog sich auf das Skript. Dieses kannst du nicht mit einer normalen Query-Kompo ausführen. dafür gibt es TZSQLProcessor
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

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

  Alt 22. Jun 2009, 22:47
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...
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 22. Jun 2009, 23:19
Zitat von sx2008:
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:47 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