![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: DBX
Feldname konnte nicht erkannt werden
Hallo,
ich habe ein Problem mit Firebird, Delphi 2010, Zugriff über DBExpress. Ich erstelle eine Connection:
Delphi-Quellcode:
Dann möchte ich eine parmetrisierte Abfrage machen:
F_con := TSQLConnection.Create(self);
F_con.DriverName := 'Firebird'; F_con.GetDriverFunc := 'getSQLDriverINTERBASE'; F_con.LibraryName := 'dbxfb.dll'; F_con.VendorLib := 'fbclient.dll'; F_con.Params.Add('database=localhost:' + ExtractFileDir(Application.ExeName) + '\test.fdb'); F_con.Params.Add('user_name=sysdba'); F_con.Params.Add('password=masterkey'); F_con.VendorLib := 'fbclient.dll'; F_con.Open;
Delphi-Quellcode:
in der Zeile
var q : TSQLQuery;
begin q := TSQLQuery.Create(self); try q.SQLConnection := F_con; q.CommandText := 'SELECT * FROM NEW_TABLE WHERE ID = :ID'; q.PrepareStatement; q.ParamByName('ID').AsInteger := 1; q.Prepared := True; q.Open; if not q.Eof then showmessage(q.FieldByName('NAME').AsString); q.Close; finally q.Free; end; end;
Delphi-Quellcode:
kommt es dann zu der Meldung
q.prepared := True
Zitat:
Wir haben bisher mit Delphi 2006, Firebird 2.0 und DBExpress gearbeitet, allerdings mit dem INterbasetreiber. Das hat problemlos funktioniert. Kann mir jemand helfen? Ich bin momentan etwas ratlos.... Danke! Jens |
AW: Feldname konnte nicht erkannt werden
Er scheint den Parameter nicht als solchen zu erkennen. Versuch mal
SQL-Code:
SELECT * FROM NEW_TABLE WHERE ID = ?;
|
AW: Feldname konnte nicht erkannt werden
Er scheint die Parameter gar nicht wirlich auszuwerten.
Mit dieser Änderung erhalte ich "Listindex überschreitet das Maximum" beim Zugriff auf den Parameter.
Delphi-Quellcode:
q.CommandText := 'SELECT * FROM NEW_TABLE WHERE ID = ?';
q.PrepareStatement; q.Params[0].AsInteger := 1; // q.ParamByName('ID').AsInteger := 1; |
AW: Feldname konnte nicht erkannt werden
Also, dass die Parameter nicht als Parameter erkannt würden, ist nicht das Problem. Nach q.PrepareStatemnt habe einen Parameter (q.Params.Count) und q.Params[0].Name hat den Namen "ID". Passt also. Es scheint irgendwie später ein Problem zu geben, wenn er die Werte der Parameter an die Feld hängen will (beim Prepared := True, bzw. beim q.open).
Hmm, bin also noch nicht weiter... |
AW: Feldname konnte nicht erkannt werden
Hallo,
kennst du das hier ? ![]() Was passiert eigentlich, wenn du es ohne Parameter ausprobierst. Ich habe nämlich den Verdacht, dass du für Selects ein DataSet brauchst. Heiko |
AW: Feldname konnte nicht erkannt werden
Nein, da brauch ich kein Dataset, wenn ich die Daten nicht in einem Steuerelement anzeigen möchte. Mein Beispiel funktioniert bei mir in Delphi 2006 + DBX + Firebird problemlos.
Ich habe jetzt noch weiter rumgespielt. Kurioserweise funktioniert es korrekt, wenn ich q.PrepareStatement weglasse. :shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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