Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FireDAC TFDIBInfo: Invalid clumplet buffer structure (https://www.delphipraxis.net/193931-firedac-tfdibinfo-invalid-clumplet-buffer-structure.html)

WiPhi 25. Sep 2017 13:41

Datenbank: Firebird • Version: 2.5.7 • Zugriff über: FireDAC

FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
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

hoika 25. Sep 2017 20:52

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Hallo,
hast du mal die Firewalls ausgeknippst?
Kannst du "SERVERNAME" sonst erreichen?
Was ist, wenn die lokal bist, aber per Localhost auf die DB zugreifst?

WiPhi 25. Sep 2017 21:02

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Firewall hab ich deaktiviert.
Die Schnittstelle und diese Funktion funktionierte auch mit einer FIBPlus-Schnittstelle, die ich gerne ersetzen möchte.
DB kann ich also erreichen. Über lokal ist das ja auch alles kein Problem, problematisch wird es wohl erst wenn ich im Netz arbeite.

hoika 25. Sep 2017 21:10

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Hallo,
schon gesehen, dass es FireDac ist ;)

Kannst du denn die Version der DB auf dem Server auslesen,
wenn du die lokal funktionierende DB mal auf den Server packst?

Also die identische Datei benutzen.

WiPhi 26. Sep 2017 07:13

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Habe das gerade nochmal getestet, nein das Auslesen der Version geht nicht, wenn ich die lokal funktionierende DB auf einen Server packe.

Ich erhalte wie eingangs erwähnt mit
Delphi-Quellcode:
    FIBServerProperties.QueryTimeout := 3;
    FIBServerProperties.ConnectTimeout := 5;
eine

Code:
EIBNativeException mit der Meldung [FireDAC][Phys][FB]Invalid clumplet buffer structure: buffer end before end of clumplet - clumplet too long
und ohne eine

Code:
EIBNativeException mit der Meldung '[FireDAC][Phys][FB]Unable to complete network request to host
Also kann es an der Datenbank nicht liegen. :|

haentschman 26. Sep 2017 07:35

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Moin...:P
Nur mal so am Rande... :gruebel:
Hast du den FireDAC Client/Server Pack
https://www.embarcadero.com/de/app-d...ack-for-delphi
gekauft? In der Professional Version ist nur Lokal drin.

Die Meldung:
Zitat:

EIBNativeException mit der Meldung '[FireDAC][Phys][FB]Unable to complete network request to host
...riecht danach das du den Standard hast.

WiPhi 26. Sep 2017 09:17

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Nein, den habe ich nicht. Ich habe nur die Standard-version, die bei Delphi Prof dabei ist.

Was mich daran wundert ist, das alle anderen Funktionen Client/Server technisch gehen. Also DB Abfragen (Select) und Änderungen (Insert, Update, Delete), Modifikationen wie CREATE, ALTER und DROP habe ich auf die schnelle noch nicht getestet.

Kann mir dazu jemand eine Auskunft geben, ob ich mit der Standard bezühlich der SQL Anweisungen bei einem Client/Server zukünftig in Probleme laufe? Derzeit ist das Budget für den Client/Server Pack noch nicht gegeben. Notfalls müsste ich auf das Auslesen der Server Version erstmal verzichten, aber deswegen mir den Client/server Pack zu kaufen ist erstmal nicht drin :roll:

Danke für die bisherigen Infos, daran hatte ich nicht gedacht.

nahpets 26. Sep 2017 09:41

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Nutzt Du nur FireBird-Datenbanken oder muss die Lösung (auf Dauser) datenbankunabhängig sein?

Serverversion von Firebird per SQL abfragen:
SQL-Code:
SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') from rdb$database;
http://www.firebirdfaq.org/faq223/

WiPhi 26. Sep 2017 09:48

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Derzeit ist es nur eine Firebird-DB und das wird auch erstmal so bleiben. Deine Abfrage wäre auch mein Notausgang gewesen :thumb:

Nur habe ich jetzt ein bisschen Panik, dass meine Anwendung wegen der Aussage von haentschman den Dienst bei Client/Server verweigert... :| Erste Tests widersprechen dem jedoch und es scheint auch alles zu funktionieren.

Ich frage einfach mal in die Runde: Haben andere die Delphi Prof mit FireDAC Standard im Client/Server Betrieb mit Firebird im Einsatz?

Jumpy 26. Sep 2017 09:52

AW: FireDAC TFDIBInfo: Invalid clumplet buffer structure
 
Was heißt client/server? Wenn das Server-Programm auf die (für das Server-Programm) Lokal liegende Datenbank zugreift gibt es ja kein Problem?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Seite 1 von 2  1 2      

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