AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Feldname konnte nicht erkannt werden

Feldname konnte nicht erkannt werden

Ein Thema von Nersgatt · begonnen am 29. Jun 2010 · letzter Beitrag vom 29. Jun 2010
Antwort Antwort
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
677 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Feldname konnte nicht erkannt werden

  Alt 29. Jun 2010, 12:58
Datenbank: Firebird • Version: 2.1 • Zugriff über: DBX
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 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
Jens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.234 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Feldname konnte nicht erkannt werden

  Alt 29. Jun 2010, 13:02
Er scheint den Parameter nicht als solchen zu erkennen. Versuch mal
SELECT * FROM NEW_TABLE WHERE ID = ?;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
677 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Feldname konnte nicht erkannt werden

  Alt 29. Jun 2010, 13:07
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;
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
677 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Feldname konnte nicht erkannt werden

  Alt 29. Jun 2010, 13:43
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...
Jens
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
6.908 Beiträge
 
Delphi XE4 Professional
 
#5

AW: Feldname konnte nicht erkannt werden

  Alt 29. Jun 2010, 13:53
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
677 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Feldname konnte nicht erkannt werden

  Alt 29. Jun 2010, 14:00
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.
Jens
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf