Problem beim insert in InterBaseDB
-
Hi,
ich bin nicht in der Lage, aus meiner Anwendung heraus einen Datensatz in eine InterBase-DB einzufügen. Die DB-Anbindung steht per IBDatabase. Die IBTransaction ist geöffnet und meinem IBDataSet füge ich soAnsiString s="insert into produktion (produkt_id, gewicht) values (1,20000)"; DataSetProduktion->Close(); DataSetProduktion->InsertSQL->Clear(); DataSetProduktion->InsertSQL->Add(s); DataSetProduktion->Open; Transaction->Commit();einen InsertSQL zu.Ich bekomme auch keine Fehlermeldung!!! Also müsste es doch geklappt haben...
Wenn ich aber die Datenbank mit IBExpert öffne, hat sich nichts getan
KEIN DATENSATZ VORHANDEN...
Wo liegt denn mein Fehler?Gruß Torsten
-
schau mal in der BCB Hilfe unter ExecSQL()
-
habe ich gemacht. Das ExecSQL() bezieht sich doch aber auf ein IBQuery. Diese Komponente benötige ich doch eigentlich nicht, da ich schon ein IBDataSet habe. In diesem gibt es doch InsertSQL.
-
ok, dann formuliere ich meinen Beitrag um:
schau mal in der BCB-Hilfe unter TIBDataSet und dort bei Methoden, dort findest du was ich schon vorher sagte
dass das Beispiel sich auf IBQuery bezieht ist nur ein Beispiel...
Hast du das überhaupt mal ausprobiert?
-
Hi,
erstmal möchte ich mich Linneas Aussage anschließen. ExecSQL() ist Dein Freund (Open() wird für Queries verwendet, die eine Datenmenge zurückgeben, ein Insert gibt aber keine Datenmenge zurück, deshalb ExecSQL).
Ich hab' zwar die IB-Komponenten nicht installiert, aber bei den BDE Kompononenten ist es so, dass man speziell den Insert-SQL aufrufen muß. Diese Anweisungen sollte man auch parametrisieren. Das hat diverse Vorteile...
Bei der BDE könnte ein parametrisierter Aufruf so aussehen:
SQL-Anweisung (die Anweisung wird zur Laufzeit nicht mehr geändert):
insert into produktion (produkt_id, gewicht) values (:pid,:pgewicht)updnodes->Query[ukInsert]->ParamByName("pid")->AsInteger = <Hier die Id>; updnodes->Query[ukInsert]->ParamByName("pgewicht")->AsFloat = <Hier das Gewicht> updnodes->Query[ukInsert]->ExecSQL();
-
Sorry, das ich erst so spät antworte

so weit so gut,
ich habe in den Methoden der IBDataSet nachgesehen. Da gibt es (angeblich) ja die Methode ExecSQL(). Wenn ich aber per Code auf diese Methode zugreifen möchte,
Soll heißen:IBDataSet->InsertSQL-> ???KEIN ExecSQL()!
Auch bei
IBDataSet-> ???KEIN ExecSQL()!
Was mache ich denn da falsch ???
-
Hi,
ich hab' zwar immer noch kein IB, aber in der Hilfe steht, dass bei TIBDataSet ausgehend vom SelectSQL das InsertSQL, ModifySQL und DeleteSQL aufgebaut werden müssen. Diese sollten zur Laufzeit nicht mehr geändert werden. Es sollten KEINE Werte direkt in die SQL-Anweisungen geschrieben werden, sondern entsprechende Parameter verwendet werden.
Um dynamische aufgebaute Inserts durchzuführen, solltest Du TIBSQL verwenden.