Einzelnen Beitrag anzeigen

WiPhi

Registriert seit: 19. Feb 2015
90 Beiträge
 
Delphi 11 Alexandria
 
#1

FireDAC TFDIBInfo: Invalid clumplet buffer structure

  Alt 25. Sep 2017, 14:41
Datenbank: Firebird • Version: 2.5.7 • Zugriff über: FireDAC
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.
  Mit Zitat antworten Zitat