![]() |
Datenbank: FB • Version: 2.1 • Zugriff über: IB
INSERT INTO parameterisiert funktioniert nicht
Hallo DPler,
weis jemand warum dieser Code mir 2 Probleme bereitet?
Delphi-Quellcode:
Als erstes Funktioniert das Einfuegen in die DB nicht und zum zweiten wenn ich auf Button2 klicke bekomme ich den Fehler "Transaction is active" und weis nicht wirklich was damit anzufangen.
procedure TForm1.Button1Click(Sender: TObject);
begin IBDatabase1.Connected := true; end; procedure TForm1.Button2Click(Sender: TObject); begin IBQuery1.Transaction.StartTransaction; try IBQuery1.SQL.Text := 'SELECT * FROM Test'; IBQuery1.Open; while not IBQuery1.Eof do begin ListBox1.Items.Add(IBQuery1.Fields[0].AsString); IBQuery1.Next; end; IBQuery1.Close; finally IBQuery1.Transaction.Rollback; end; end; procedure TForm1.Button3Click(Sender: TObject); begin IBQuery1.Active := False; IBQuery1.SQL.Text := 'INSERT INTO Test(acol, bcol) VALUES(:acol, :bcol)'; IBQuery1.ParamByName('acol').AsInteger := 70001; IBQuery1.ParamByName('bcol').AsString := 'Tabby'; ShowMessage(IBQuery1.SQL.Text); IBQuery1.ExecSQL; IBQuery1.Active := True; end; procedure TForm1.FormDestroy(Sender: TObject); begin IBDatabase1.Connected := false; end; Vlt. kann mir jemand helfen mit dem Beispielcode umzugehen? Danke! |
Re: INSERT INTO parameterisiert funktioniert nicht
Zitat:
Gibt es schon einen Datensatz mit [70001, 'Tabby'] ? Hast die Tabelle weitere Felder mit dem Attribut NOT NULL dass das Einfügen verhindert? Zitat:
Eine Transaction ist nicht notwendig. IBQuery1.Transaction.StartTransaction und IBQuery1.Transaction.Rollback weglassen. Ausserdem: es ist besser jeweils eine eigene Query-Komponente für jede SQL-Anweisung zu benützen. Dann kannst du das Property SQL im Objektinspektor festlegen und dann gleich prüfen ob ggf. vorhandene Parameter den richtigen Datentp haben. Falls zur Entwicklungszeit keine Verbindung zur Datenbank besteht kann der Datentyp der Parameter nicht ermittelt werden. Bei Parametern ist der Datentyp sehr wichtig; ein falscher/unbekannter Datentyp ist der Hauptgrund für Probleme mit Parametern. |
Re: INSERT INTO parameterisiert funktioniert nicht
Hallo,
Zitat:
Zitat:
Zitat:
|
Re: INSERT INTO parameterisiert funktioniert nicht
Wie sind die Transkationseinstellungen?
BTW ist der Cast des Parametertyps dann auch nicht nötig Zitat:
Delphi-Quellcode:
[Edit:
IBQuery1.ParamByName('acol').Value := 70001;
Zitat:
] |
Re: INSERT INTO parameterisiert funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal n Screenshot angehaengt.
Und warum ist bei IBQuery1 ein gelbes dickes Fragezeichen? //Edit: Ich hab jetzt ca. 12 mal 70001 drin da ich es zig mal wohl eingetragen habe. Ich hab dieses
Delphi-Quellcode:
und
IBQuery1.Transaction.StartTransaction;
Delphi-Quellcode:
rausgemacht und sie werden angezeigt.
IBQuery1.Transaction.Rollback;
Was genau machen denn diese 2 Zeilen? |
Re: INSERT INTO parameterisiert funktioniert nicht
.StartTransaction startet eine Transaktion und .RollBack verwirft die Änderungen
Da aber AutoCommit aktiviert ist ist dies nicht notwendig. Bei Select-Abfragen ist es übrigens egal ob Commitet oder zurückgefahren wird. |
Re: INSERT INTO parameterisiert funktioniert nicht
Will mich nicht wirklich einmischen, aber bei meinem letzten und bisher einzigen Projekt mit FB und IB-Komponenten musste ich um jede, aber auch wirklich jede Anweisung in eine Transaktion kapseln, selbst ein SELECT musst so abgesetzt werden. Nur dann hat es funktioniert.
|
Re: INSERT INTO parameterisiert funktioniert nicht
Die Autocommit-Option macht dies automatisch. Diese macht imho aber nur bei Selects Sinn.
|
Re: INSERT INTO parameterisiert funktioniert nicht
Zitat:
|
Re: INSERT INTO parameterisiert funktioniert nicht
DefaultAction: TACommit
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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