Hallo alle zusammen,
ich habe ein Problem beim Zugriff auf meine Firebird Datenbank via FireDAC. Ich möchte von der Datenbank die Versionsinformationen auslesen, hierfür verwende ich folgende Funktion:
Delphi-Quellcode:
function TDBInterface.RetrieveServerVersionStr:
String;
var
FIBServerProperties: TFDIBInfo;
Version: TIBInfo.TVersion;
begin
Result := EmptyStr;
FIBServerProperties := TFDIBInfo.Create(
nil);
try
FIBServerProperties.Host := '
SERVERNAME';
FIBServerProperties.Port := 3050;
FIBServerProperties.Protocol := ipTCPIP;
FIBServerProperties.DriverLink := FDPhysFBDriverLink;
FIBServerProperties.UserName := '
SYSDBA';
FIBServerProperties.Password := '
pass';
FIBServerProperties.QueryTimeout := 3;
FIBServerProperties.ConnectTimeout := 5;
FIBServerProperties.GetVersion(Version);
// <- EIBNativeException mit der Meldung [FireDAC][Phys][FB]Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long
Result := Version.FServerStr;
finally
FIBServerProperties.Free;
end;
end;
Der Aufruf von
Code:
FIBServerProperties.GetVersion(Version)
führt zu der im Code genannten
Exception.
Durch etwas probieren, habe ich folgendes herausfinden können:
Kommentiere ich die Zeilen
Code:
FIBServerProperties.QueryTimeout := 3;
FIBServerProperties.ConnectTimeout := 5;
aus, wird FIBServerProperties.GetVersion(Version) korrekt ausgeführt und ich erhalte die gewünschten Informationen. Jedoch funktioniert das nur auf einer lokalen Datenbank. Auf einer Datenbank, die auf einem Server liegt, erhalte ich
Code:
EIBNativeException mit der Meldung '[FireDAC][Phys][
FB]Unable to complete network request to host
(Vermutlich, weil der Server keine Zeit zum Antworten bekommt.)
Suche ich nach dem Buffer Fehler, finde ich einen Eintrag in der Firebird FAQ:
http://www.firebirdfaq.org/faq320/
Zitat:
If you use Firebird
API directly from C, check your code. Otherwise it may be a bug in your connectivity library. It is also a common error message when you don't use multibyte character sets properly (for example UTF-8).
Kann mir jemand helfen oder ist das ein Fehler in der FireDAC Schnittstelle?
Über Antworten und Tipps würde ich mich sehr freuen!
P.S.: Ich verwende übrigens FireDAC aus der Delphi Prof. 10.2.1
Wer sucht, der findet. Wer länger sucht, findet mehr.