ich habe mir HeidiSQL unter Linux selbst gebaut und ausgeführt.
Dabei zeigt sich, dass der InterBase/Firebird-Support im Quellcode aktuell auskommentiert ist.
Der von mir verwendete Code-Stand ist ein paar Wochen alt. Ich habe zwar die Library-Erkennung unter Linux korrigiert, das ändert jedoch nichts am eigentlichen Problem: Der Firebird/InterBase-Code ist derzeit nicht aktiv.
Zum Beispiel wird in TConnectionParameters.CreateConnection kein Connection-Objekt für ngInterbase erzeugt:
Code: Alles auswählen
function TConnectionParameters.CreateConnection(AOwner: TComponent): TDBConnection;
begin
case NetTypeGroup of
ngMySQL:
Result := TMySQLConnection.Create(AOwner);
{$IFDEF HASMSSQL}
ngMSSQL:
Result := TSqlSrvConnection.Create(AOwner);
{$ENDIF}
ngPgSQL:
Result := TPgConnection.Create(AOwner);
ngSQLite:
Result := TSQLiteConnection.Create(AOwner);
// ngInterbase:
// Result := TInterbaseConnection.Create(AOwner);
else
raise Exception.CreateFmt(_(MsgUnhandledNetType), [Integer(FNetType)]);
end;
Result.Parameters := Self;
end;
Auch beim Erzeugen von Query-Objekten ist ngInterbase auskommentiert:
Code: Alles auswählen
case NetTypeGroup of
ngMySQL: Result := TMySQLQuery.Create(Connection);
ngPgSQL: Result := TPGQuery.Create(Connection);
ngSQLite: Result := TSQLiteQuery.Create(Connection);
// ngInterbase:
// Result := TInterbaseQuery.Create(Connection);
else
raise Exception.CreateFmt(_(MsgUnhandledNetType), [Integer(FNetType)]);
end;
Zusätzlich ist der eigentliche Verbindungsaufbau (TInterbaseConnection.SetActive) vollständig auskommentiert:
Code: Alles auswählen
{procedure TInterbaseConnection.SetActive(Value: Boolean);
var
DriverId: String;
begin
if Value then begin
DoBeforeConnect;
...
end;}
Sobald man Firebird auswählt (auch mit korrekt gesetzter Client-Library), wird daher genau diese Exception ausgelöst.
Zu Linux und dynamischen Libraries
Unter Linux bestimmt der dynamische Linker (ld.so), wo Shared Libraries gesucht werden.
Dies geschieht primär über einen Cache (/etc/ld.so.cache), der mit ldconfig aus den Pfaden in /etc/ld.so.conf und /etc/ld.so.conf.d/ aufgebaut wird.
Ein Verzeichnis wie /opt/firebird/lib ist nicht automatisch Teil dieser Standard-Suche und muss explizit registriert werden.
Firebird legt zudem mehrere symbolische Links (libfbclient.so → libfbclient.so.2 → …) auf die eigentliche Library an, über die die Auflösung zur Laufzeit erfolgt.
Dokumentation
ld.so – Suchreihenfolge und Mechanismus:
https://man7.org/linux/man-pages/man8/ld.so.8.html
Shared Libraries HOWTO (ldconfig, Pfade, Cache):
https://www.linuxdoc.org/HOWTO/Program- ... aries.html
Unix.SE: Suchpfade & LD_LIBRARY_PATH:
https://unix.stackexch