Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feldname konnte nicht erkannt werden (https://www.delphipraxis.net/152604-feldname-konnte-nicht-erkannt-werden.html)

Nersgatt 29. Jun 2010 12:58

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:
  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;
Dann möchte ich eine parmetrisierte Abfrage machen:

Delphi-Quellcode:
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;
in der Zeile
Delphi-Quellcode:
q.prepared := True
kommt es dann zu der Meldung
Zitat:

"Die Feldnamen für %s konnten nicht erkannt werden."
Wenn ich nicht mit parametresierten Abfragen arbeite, dann klappt es wunderbar. Die Connection wird korrekt aufgebaut und ist offen. Wie gesagt, zu der Meldung kommt es nur, wenn ich Parameter verwende. Lasse ich das q.Prepared := True weg, dann kommt es zur selben Meldung, allerdings dann beim q.open.
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

mkinzler 29. Jun 2010 13:02

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 = ?;

Nersgatt 29. Jun 2010 13:07

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;

Nersgatt 29. Jun 2010 13:43

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...

hoika 29. Jun 2010 13:53

AW: Feldname konnte nicht erkannt werden
 
Hallo,

kennst du das hier ?

http://www.andreanolanusse.com/bloge...dbx-framework/

Was passiert eigentlich, wenn du es ohne Parameter ausprobierst.
Ich habe nämlich den Verdacht, dass du für Selects ein DataSet brauchst.


Heiko

Nersgatt 29. Jun 2010 14:00

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 15:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz