Fragen zu Firebird- und InterBase-Servern (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu FAQ (FireDAC)

Dieses Thema enthält eine Liste mit Fragen und Antworten zu Firebird- und InterBase-Servern.

F1: Wie kann ich einen DLL-Pfadnamen für fbclient.dll einrichten?

A: Das allgemeine Vorgehen ist unter Konfigurieren von Treibern beschrieben. Gehen Sie folgendermaßen vor, um eine DLL zur Laufzeit auf Anwendungsbasis zu konfigurieren:

Wenn Sie eine DLL auch zur Entwurfszeit konfigurieren, dann müssen Sie "FDDrivers.ini" verwenden:

 [FB]
 VendorLib=C:\Program Files\Firebird 2.5\bin\fbclient.dll

F2: Welcher DriverName muss für Firebird 2.5 verwendet werden: IB, FB21 oder ein anderer?

A: FB ist die "Basistreiber"-ID. FB21 ist die "virtuelle" Treiber-ID. Virtuelle Treiber sind in der Datei "FDDrivers.ini" konfiguriert. Dort können Sie sich die Konfiguration von FB21 ansehen. Das ist der FB-Basistreiber, der für die Verwendung der entsprechenden "fbclient.dll" konfiguriert ist. Sie können eigene virtuelle Treiber erstellen. Zum Beispiel:

 [Firebird25]
 BaseDriverID=FB
 VendorLib=C:\Program Files\Firebird 2.5\bin\fbclient.dll

F3: Wie kann ich FireDAC dazu veranlassen, Felder als boolesche Felder zu erkennen?

A: Ein boolesches Feld muss mit einer Domäne erstellt werden. Der Domänenname muss den Teilstring "BOOL" enthalten. Fügen Sie außerdem Ihrer Verbindungsdefinition den Parameter "ExtendedMetadata=True" hinzu. Zum Beispiel:

 CREATE DOMAIN T_BOOLEAN SMALLINT;
 CREATE TABLE ... (
   ...
   BOOLEAN_FIELD T_BOOLEAN,
   ...);

F4: Wie kann ich FireDAC dazu veranlassen, Felder als GUID-Felder zu erkennen?

A: Ein GUID-Feld muss mit einer Domäne erstellt werden. Der Domänenname muss den Teilstring "GUID" enthalten. Fügen Sie außerdem Ihrer Verbindungsdefinition den Parameter "ExtendedMetadata=True" hinzu. Zum Beispiel:

 CREATE DOMAIN T_GUID AS CHAR(16) CHARACTER SET OCTETS COLLATE OCTETS;
 CREATE TABLE ... (
   ...
   GUID_FIELD T_GUID,
   ...);

F5: Kann mit SQL eine Firebird-Datenbank entfernt werden?

A: Das ist mit TFDQuery nicht möglich, weil die Anweisung DROP DATABASE keine Firebird-SQL-Anweisung ist, sondern eine ISQL-Anweisung. Geben Sie stattdessen "DropDatabase=Yes" in den Verbindungsdefinitionsparametern an, oder verwenden Sie TFDScript mit einer DROP DATABASE-Anweisung.

F6: Wie kann ich in Firebird ein Benutzerpasswort ändern?

A: FireDAC unterstützt die Passwortänderung in Firebird 2.5 (sowie in Treibern für Oracle, MySQL, PostgreSQL, SQL Server und SQLite) mit dem Code:

 FDConnection1.Connected := True;
 FDConnection1.ConnectionIntf.ChangePassword('new password');

F7: Wie kann ich eine Datenbank als schreibgeschützt kennzeichnen?

A: Geben Sie in den Verbindungsdefinitionsparametern Folgendes an:

 IBAdvanced=set_db_readonly=1

F8: Es scheint, dass AutoCommit mit Firebird nur funktioniert, wenn "FetchOptions.Mode = fmAll", andernfalls funktioniert es überhaupt nicht. Können Sie mir erklären, wie AutoCommit tatsächlich arbeitet?

A: Die Anweisung COMMIT macht alle in dieser Transaktion geöffneten Cursor ungültig. FireDAC behandelt Transaktionen automatisch anhand der folgenden Regeln:

  • Wenn Sie eine Anweisung vorbereiten und keine aktive Transaktion vorhanden ist, dann wird sie gestartet.
  • Wenn Sie die Methode Commit explizit aufrufen, dann werden alle in dieser Transaktion geöffneten Datenmengen in den Offline-Status versetzt (FetchAll + Schließen + Aufheben der Vorbereitung der zugrunde liegenden Anweisung, aber nicht einer Datenmenge selbst).
  • Wenn die Transaktion nur einen aktiven Cursor hat, dann wird sie automatisch übergeben, nachdem der letzte Datensatz von diesem Cursor abgerufen wurde (wenn durch eine Option angefordert).
  • Wenn die Transaktion keine aktiven Cursor hat, dann wird sie automatisch übergeben, nachdem die Anweisung (ExecSQL) ausgeführt wurde (wenn durch eine Option angefordert).

Es gibt noch weitere Abstufungen, aber die Hauptregeln sind oben aufgeführt.

Die automatische Übergabe findet statt, nachdem der letzte Datensatz abgerufen wurde. Das Verhalten kann nicht geändert werden: Direkt nach Open wird FetchAll und dann Commit ausgeführt. Es gibt keine Unterschiede zwischen fmOnDemand und fmAll.

Wenn Sie die Datenmengendatensätze, die geändert und in die Datenbank eingetragen wurden, für andere Sitzungen sichtbar machen müssen, während noch nicht alle Datensätze aus der Datenmenge abgerufen wurden, verwenden Sie einfach ein zweites Aktualisierungstransaktionsobjekt. Damit bleibt die Cursor-Transaktion aktiv, und Aktualisierungen werden in den anderen kurzen Transaktionen ausgeführt. Auf diese Weise werden die Änderungen für die anderen Benutzer sichtbar.

F9: Wie kann man mit einem Alias eine Verbindung herstellen?

A: Setzen Sie einfach den Parameter Protocol auf einen leeren String, oder geben Sie ihn überhaupt nicht an.

F10: Was bedeutet "[FireDAC][Phys][FB] connection rejected by remote interface" (Verbindung von Remote-Interface zurückgewiesen)?

A: Sie stellen wahrscheinlich eine Verbindung zu einem Firebird-Server mit einem FB-Treiber unter Verwendung von GDS32.DLL her.

F11: Was bedeutet "Assertion failure (FireDAC.Phys.IBWrapper.pas, line 2052)" (Assertion-Fehler (FireDAC\source\uADPhysIBWrapper.pas, Zeile 2052))?

A: Sie stellen wahrscheinlich eine Verbindung zu einem InterBase-Server mit einem IB-Treiber unter Verwendung von FBCLIENT.DLL her.

F12: Was bedeutet "no permission for read/select access to TABLE" (Keine Berechtigung für Lese-/Schreibzugriff auf TABLE) bei Firebird Embedded?

A: Obwohl vom eingebetteten Server die Sicherheitsdatenbank nicht verwendet wird, überprüft er anhand des Benutzernamens die Berechtigungen. Wenn der Benutzername nicht angegeben oder falsch angegeben ist, wird dieser Fehler ausgegeben.