Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mehrere Inserts in einem Query (https://www.delphipraxis.net/61983-mehrere-inserts-einem-query.html)

Der Jan 29. Jan 2006 11:24

Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus

Mehrere Inserts in einem Query
 
Hi,

kann es sein, das man pro Query (FIBQuery) nur ein Insert ausführen kann? Ich will ganz normal mehrere Datensätzen in eine Tabelle einfügen und bau im Programm ein Query so als Beispiel:

SQL-Code:
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (4,1234);
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (5,1234);
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (23,1234);
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (76,1234);
INSERT INTO ZUBEHOERTEILE (NAME_MANUELL,AUFTRAGID) VALUES ('Manschette grau',1234);
INSERT INTO ZUBEHOERTEILE (NAME_MANUELL,AUFTRAGID) VALUES ('wasweißichnochfürzeuch',1234);
Wenn ich das Teil mittels MyQuery.ExecQuery ausführe, gibts Gemecker beim zweiten Insert: 'Dynamic SQL Error, Invalid Token INSERT at line 2, column 1....' :gruebel:

Natürlich könnte ich jedes Insert separat ins FIBQuery setzen und ausführen Das funzt ja auch), aber das ist ja nicht wirklich im Sinne des Erfinders... :(

Wo liegt das Problem? Das Query selbst ist ja wohl richtig. Gibts bei FIBQuery vielleicht noch irgendwelchen Properties/Flags für sowas? in grad bissel planlos....

alzaimar 29. Jan 2006 11:39

Re: Mehrere Inserts in einem Query
 
vielleicht #13#10, anstatt ';'?

mkinzler 29. Jan 2006 11:48

Re: Mehrere Inserts in einem Query
 
Das Zeichen ';' wird als Ende des gesamten Staements angesehen. Dehalb Mit 'SET TERM anderes Terminal Zeichen setzten:

SQL-Code:
SET TERM !! ;
INSERT ... ;
INSERT ... !!
SET TERM ; !!

alex517 29. Jan 2006 12:28

Re: Mehrere Inserts in einem Query
 
Hallo Jan,

Wenn du mehrere Statements mit einem Mal abarbeiten willst,
so empfiehlt Devrace dafür FibPlus Script.
alex

Avax2k 29. Jan 2006 13:07

Re: Mehrere Inserts in einem Query
 
sollte so klappen:

Delphi-Quellcode:
try
with Query do
Open;
Insert.
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (4,1234);
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (5,1234);
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (23,1234);
INSERT INTO ZUBEHOERTEILE (ZUBEHOERID,AUFTRAGID) VALUES (76,1234);
INSERT INTO ZUBEHOERTEILE (NAME_MANUELL,AUFTRAGID) VALUES ('Manschette grau',1234);
INSERT INTO ZUBEHOERTEILE (NAME_MANUELL,AUFTRAGID) VALUES ('wasweißichnochfürzeuch',1234);
post
finally
end;
musst es nur noch entsprechend anpassen mit den Felder aus denen du die Information schreibst..

wohl besser dann so

Delphi-Quellcode:
...
insert;
Query.FieldByName('Zubehoerid').AsString := Edit1.Text;
Query.FieldByName('Auftragid').AsString := Edit2.Text;
...
post;

Der Jan 29. Jan 2006 13:35

Re: Mehrere Inserts in einem Query
 
Zitat:

Zitat von mkinzler
Das Zeichen ';' wird als Ende des gesamten Statements angesehen. Dehalb Mit 'SET TERM anderes Terminal Zeichen setzten:

SQL-Code:
SET TERM !! ;
INSERT ... ;
INSERT ... !!
SET TERM ; !!

Äh ja. Als ich das gelesen hab, hab ich schon gedacht "alles klar, das isses". Weil ist ja eigentlich logisch. Nur leider ist SET TERM hier nicht erlaubt, geht wahrscheinlich nur im PSQL.

Zitat:

Zitat von Avax2k
sollte so klappen:

Delphi-Quellcode:
try
with Query do
Open;
Insert.
//...
musst es nur noch entsprechend anpassen mit den Felder aus denen du die Information schreibst..

wohl besser dann so

Delphi-Quellcode:
...
insert;
Query.FieldByName('Zubehoerid').AsString := Edit1.Text;
Query.FieldByName('Auftragid').AsString := Edit2.Text;
...
post;

Ne, das geht wohl beim TQuery, ich hab nehm doch aber FIBPlus. Und TFIBQuery ist ne reine( kleine, feine :) ? ) Abfrage und kein Nachfolger von TDataSet...


Zitat:

Zitat von alex517
Hallo Jan,

Wenn du mehrere Statements mit einem Mal abarbeiten willst,
so empfiehlt Devrace dafür FibPlus Script.
alex

Hm, das werd ich wir dann wohl mal genauer anschauen. Sieht auf den ersten Blick vielversprechend aus. Und $30 ist auch ganz erträglich...

Die Lösung, bzw. die Antwort, das es nicht geht, steht ja auch gleich darin:
Zitat:

You can not execute a few different SQL statements at once with TpFIBQuery or TpFIBDataSet. Both components can operate with single SQL statements only.
Ok, dann erstmal danke für eure Hilfe. Ich werd dann wohl vorerst bei der alten Lösung bleiben und ein Inssert nach dem anderen abarbeiten....


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