Fehlermeldung „Falsche Werte in der SQLDA -Struktur“ mit Firebird und Delphi 2009
-
13-09-2019 - |
Frage
Ich habe mich mit der Fehlermeldung "falsche Werte in der SQLDA -Struktur" begegnet, wenn ich versuche, das BLOB -Feld in der Firebird 2.1 -Datenbank aus der DBX -Anwendung von Delphi 2009 zu aktualisieren.
Ich erhalte jedoch die Fehlermeldung, wenn ich versuche, TSQLQuery mit folgendem SQL auszuführen: "Mytable Set Field1 =: Daten, wobei id =: id" aktualisieren. "
Der relevante Delphi -Code ist:
MyQuery.ParamByName('id').AsInteger := id;
MyQuery.ParamByName('data').LoadFromFile(filename, ftBlob);
MyQuery.ExecSQL();
Wo soll ich suchen? Dies hat in früheren Delphi -Versionen funktioniert.
Lösung
Überprüfen Sie Ihren Fahrer - es ist es Für Firebird oder du benutzt einfach das Interbase Fahrer dafür?. Es ist bekannt, dass das Firebird -Team die SQLDA -Struktur für Blobs in 2.1 verändert hat und der Interbase -Treiber daher nicht mehr verwendet werden kann.
Sie haben hier einige Optionen:
- (Empfohlen, IMHO) Upgrade auf Delphi 2010 - Neben einem DBX -Firebird -Treiber erhalten Sie viel mehr Dinge zum Spielen (siehe hier für mehr)
- Kaufen Sie einen Drittanbieterfahrer für Firebird, der in Delphi 2009 arbeitet
- "Downgrade" Your Firebird (benutze ihn natürlich als letztes Mittel)
- Ändern Sie Ihre Konnektivitätsbibliothek. Ja, es könnte einen Umschreiben von Code implizieren.
Andere Tipps
Vielleicht müssen Sie den kostenlosen DBX -Treiber für Firebird verwenden
Dies ist die Art von Krypta -Fehler, mit der der Interbase -Treiber von Delphi angezeigt wird.
Ich habe dieses Problem gesehen, wenn Sie in Ihrer SQL -Anweisung unterschiedliche Parameter und in Ihrer Abfragekomponente definiert haben.
Das erste, was mir in den Sinn kommt, ist sicherzustellen, dass die Client -DLL (GDS32.DLL oder FB32.DLL oder FBCLIENT.DLL.Dll, der Name von Firebird, die Sie verwenden) genau mit der von Ihnen verwendeten Serverversion übereinstimmt.
-Jeroen
FWIW, ich habe diesen Fehler in einem Perl -Programm erhalten, indem ich eine Anweisung ohne Bindungsvariablen ausführte, wenn sie benötigt wurde.