Ich hab ein Problem bei folgender Anweisung :
DM1.Q_Webs1.active:=false;
DM1.Q_Webs1.SQL.Clear;
DM1.Q_Webs1.SQL.Add('INSERT INTO webs
(web,server,log_host,log_database,log_benutzer,log_pass,ziel_name)');
DM1.Q_Webs1.SQL.Add('VALUES
("'+web+'","'+inttostr(ServerNr)+'","'+host+'","'+database+'","'+login+'","'
+pass+'","'+ziel+'")');
DM1.Q_Webs1.active:=true;
Es wird der Datensatz zwar eingefügt aber lustigerweise 2x, allso doppelt
!!!
kann mir da irgend Jemand sagen warum das so ist, bitte !
Grüsse aus Kärnten
Martin Ess, m...@linea7.com
1. nur eine sql.Add-Anweisung benutzen, den SQL-String entsprechend
länger machen.
2. das zweite sql.Add durch ein sql.append ersetzen.
Gruss, - B.
Danke für die schnelle Antwort !
Nur leider macht er trotzdem 2 Einträge, obwohl ich nur mehr eine ADD
Anweisung benutze !
Ich kapier das nicht ??????
Gruss Martin
Martin Ess wrote:
> Ich hab ein Problem bei folgender Anweisung :
>
> DM1.Q_Webs1.active:=false;
> DM1.Q_Webs1.SQL.Clear;
> DM1.Q_Webs1.SQL.Add('INSERT INTO webs
> (web,server,log_host,log_database,log_benutzer,log_pass,ziel_name)');
> DM1.Q_Webs1.SQL.Add('VALUES
> ("'+web+'","'+inttostr(ServerNr)+'","'+host+'","'+database+'","'+login+'","'
> +pass+'","'+ziel+'")');
> DM1.Q_Webs1.active:=true;
>
> Es wird der Datensatz zwar eingefügt aber lustigerweise 2x, allso doppelt
> !!!
>
> kann mir da irgend Jemand sagen warum das so ist, bitte !
Wie wäre es mit ExecSQL?
Martin
Hab ich jetzt probiert und es funktioniert, aber warum geht es mit
aktive:=true nicht ?
Ich hab bis jetzt immer mit dieser Technik programmiert und noch nie
Probleme gehabt
erst mit den Zeos Kompos !
Vielen Dank für den Tip !
martin
"Martin Ess" <m...@linea7.com> schrieb im Newsbeitrag
news:zIbD8.18567$5a4.2...@news.chello.at...
> > Wie wäre es mit ExecSQL?
> Hab ich jetzt probiert und es funktioniert, aber warum geht es mit
> aktive:=true nicht ?
> Ich hab bis jetzt immer mit dieser Technik programmiert und noch nie
> Probleme gehabt [...]
Warum die Zeos-Komponenten einen zweiten Datensatz ohne Fehlermeldung
generieren kann ich dir mangels Erfahrung mit diesen Komponenten (und v.a.
nicht vorhandener Leidenschaft zum Einblick in deren Quellcode... ;-) nicht
sagen. Grundsätzlich muss man bei Einsatz von SQL-basierten (R)DBMsen
zumindest aus der externen Sicht mindestens zwischen Datenmengen liefernden
Befehlen (DQL = Data Query Language) und datenändernden Befehlen (DML = Data
Manipulation Language) unterscheiden. Normalerweise ist ein
TWasAuchImmerQuery.Active := true äquivalent zu TWasAuchImmerQuery.Open und
erwartet eine Ergebnismenge.
Zum besseren Verständnis kann ich dem interessierten Leser die Lektüre eines
SQL-Einsteigerbuches (gerne auch in Bezug auf Delphi, z.B. Andreas Kosch -
Datenbankentwicklung mit Delphi) nur dringend nahelegen.
hth
Viele Grüsse aus Köln
Robert
> Es wird der Datensatz zwar eingefügt aber lustigerweise 2x, allso doppelt
> !!!
Dein SQL ist keine Abfrage, sondern ein DML-Statement, Also _D_ata
_M_anipulation. Die werden nicht geöffnet (mit Open bzw Active:=True) weil
sie kein Ergebnis liefern, sondern einfach ausgeführt. Du möchtest also
ExecSQL aufrufen.
In einem BDE-Dataset würdest Du eine Fehlermeldung bekommen und keine zwei
Datensätze, aber ich denke die Lösung ist trotzdem dieselbe.
Ciao, MM
--
Marian Aldenhövel, Hainstraße 8, 53121 Bonn
Mein Flug um die Welt (aktuelle Position: Quayaquil)
http://www.marian-aldenhoevel.de/ATW
"Martin Ess" <m...@linea7.com> schrieb:
...
> DM1.Q_Webs1.SQL.Add('INSERT INTO webs
...
> DM1.Q_Webs1.active:=true;
Nix "Active=True", also Open. ExecSQL ist Dein Freund.
Bye, Ralf
> TWasAuchImmerQuery.Active := true äquivalent zu TWasAuchImmerQuery.Open
und
> erwartet eine Ergebnismenge.
>
> Zum besseren Verständnis kann ich dem interessierten Leser die Lektüre
eines
> SQL-Einsteigerbuches (gerne auch in Bezug auf Delphi, z.B. Andreas Kosch -
> Datenbankentwicklung mit Delphi) nur dringend nahelegen.
>
Vielen Dank für Deine ausführliche Antwort !
schönen Abend noch
martin
> > Es wird der Datensatz zwar eingefügt aber lustigerweise 2x, allso
doppelt
> > !!!
>
> Dein SQL ist keine Abfrage, sondern ein DML-Statement, Also _D_ata
> _M_anipulation. Die werden nicht geöffnet (mit Open bzw Active:=True) weil
> sie kein Ergebnis liefern, sondern einfach ausgeführt. Du möchtest also
> ExecSQL aufrufen.
>
> In einem BDE-Dataset würdest Du eine Fehlermeldung bekommen und keine zwei
> Datensätze, aber ich denke die Lösung ist trotzdem dieselbe.
>
Auch Dir danke für die Antwort !
Ich war nur fehlgeleitet durch eine Komponente für MySql (nicht Zeos) die da
keinen
Unterschied machte und alles Problemlos ausführte.
schönen Abend noch
Martin
> > DM1.Q_Webs1.SQL.Add('INSERT INTO webs
> > (web,server,log_host,log_database,log_benutzer,log_pass,ziel_name)');
> > DM1.Q_Webs1.SQL.Add('VALUES
> > ("'+web+'","'+inttostr(ServerNr)+'","'+host+'","'+database+'","'+login+'","'
>
> > !!!
> Ich vermute, es liegt an dem doppelten "Add". Spontane Idee zum Ausprobieren:
>
> 1. nur eine sql.Add-Anweisung benutzen, den SQL-String entsprechend
> länger machen.
>
> 2. das zweite sql.Add durch ein sql.append ersetzen.
Quark :-(
ciao Peter
--
WWW : http://www.marbaise.de/ Uptime: 11 Days 23 Hours
Anwendungen zu Linux gesucht ?
http://freshmeat.net/ gibt Antworten