Questions relatives aux serveurs Firebird et Interbase (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à FAQ (FireDAC)

Cette rubrique contient une liste des questions et réponses relatives aux serveurs Firebird et Interbase.

Q1 : Comment puis-je configurer le nom de chemin d'une DLL pour fbclient.dll ?

R : L'approche générale est décrite dans Configuration des pilotes. Pour configurer une DLL à l'exécution pour chaque application, procédez comme suit :

Si vous allez aussi configurer une DLL à la conception, vous devez utiliser ADDrivers.ini :

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

Q2 : Quelle propriété DriverName faut-il utiliser avec Firebird 2.5 : IB, FB21 ou autre ?

R : FB est l'ID du pilote "de base" et FB21 l'ID du pilote "virtuel". Les pilotes virtuels sont configurés dans le fichier FDDrivers.ini. Vous pouvez y voir comment FB21 est configuré. C'est le pilote de base FB configuré pour utiliser le fichier fbclient.dll approprié. Vous pouvez créer vos propres pilotes virtuels. Par exemple :

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

Q3 : Comment puis-je forcer FireDAC à reconnaître un champ comme un champ booléen ?

R : Un champ booléen peut être créé à l'aide d'un domaine. Le nom du domaine doit contenir la sous-chaîne 'BOOL'. De plus, ajoutez le paramètre ExtendedMetadata=True à votre définition de connexion. Par exemple :

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

Q4 : Comment puis-je forcer FireDAC à reconnaître un champ comme un champ GUID ?

R : Un champ GUID peut être créé à l'aide d'un domaine. Le nom du domaine doit contenir la sous-chaîne 'GUID'. De plus, ajoutez le paramètre ExtendedMetadata=True à votre définition de connexion. Par exemple :

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

Q5 : Est-il possible de déposer une base de données Firebird par SQL ?

R : Ce n'est pas possible avec TFDQuery, car la commande DROP DATABASE n'est pas une commande SQL FB, mais une commande ISQL. A la place, spécifiez DropDatabase=Yes dans les paramètres de définition de connexion ou utilisez TFDScript avec la commande DROP DATABASE.

Q6 : Comment puis-je modifier un mot de passe utilisateur dans Firebird ?

R : FireDAC supporte la modification des mots de passe dans Firebird 2.5 (en plus des pilotes Oracle, MySQL, PostgreSQL, SQL Server et SQLite) à l'aide du code :

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

Q7 : Comment puis-je marquer une base de données comme étant en lecture seule ?

R : Spécifiez les paramètres de définition de connexion :

 IBAdvanced=set_db_readonly=1

Q8 : Il semble qu'AutoCommit fonctionne avec Firebird uniquement si FetchOptions.Mode = fmAll ; sinon elle ne fonctionne pas du tout. Pouvez-vous m'expliquer comment AutoCommit fonctionne vraiment ?

R : La commande COMMIT invalide tous les curseurs ouverts dans cette transaction. FireDAC gère les transactions automatiquement en suivant les règles suivantes :

  • Si vous préparez une commande alors qu'il n'y a aucune transaction active, elle démarre ;
  • Si vous appelez explicitement la méthode Commit, tous les ensembles de données ouverts dans cette transaction sont mis hors ligne (FetchAll + fermeture + annulation de la préparation de la commande sous-jacente, mais pas un ensemble de données lui-même) ;
  • Si la transaction n'a qu'un seul curseur actif, elle est automatiquement validée après l'extraction du dernier enregistrement à partir de ce curseur (si une option l'exige) ;
  • Si la transaction n'a aucun curseur actif, elle est automatiquement validée après l'exécution de la commande (ExecSQL) si une option l'exige.

Il existe d'autres nuances, mais les principales règles sont décrites ci-dessus.

La validation automatique est émise après l'extraction du dernier enregistrement. Comme nous ne pouvons pas changer ce comportement, FetchAll puis Commit sont réalisées juste après Open. Il n'y a pas de différence entre fmOnDemand et fmAll.

Si vous devez rendre ces enregistrements d'ensemble de données, qui sont modifiés et validés dans la base de données, visibles pour les autres sessions, alors que tous les enregistrements ne sont pas extraits de l'ensemble de données, utilisez seulement le deuxième objet transaction de mise à jour. Par conséquent, la transaction du curseur reste active et les mises à jour sont exécutées dans les différentes transactions brèves. Cette action rend les modifications visibles pour les autres utilisateurs.

Q9 : Comment se connecter en utilisant un alias ?

R : Il vous suffit de définir le paramètre Protocol sur une chaîne vide ou de ne pas le spécifier du tout.

Q10 : Que signifie le message "Connexion [FireDAC][Phys][FB] rejetée par l'interface distante" ?

R : Vous vous connectez probablement à un serveur Firebird avec un pilote FB en utilisant GDS32.DLL.

Q11 : Que signifie le message "Echec de l'assertion (FireDAC.Phys.IBWrapper.pas, ligne 2052)" ?

R : Vous vous connectez probablement à un serveur Interbase avec un pilote IB en utilisant FBCLIENT.DLL.

Q12 : Que signifie le message "aucune permission d'accès en lecture/sélection à la TABLE" avec FB Embarqué ?

R : Même si le serveur embarqué n'utilise pas la base de données de sécurité, il utilise toujours le nom d'utilisateur pour vérifier les droits. Si le nom d'utilisateur n'est pas spécifié ou spécifié de façon incorrecte, vous obtenez cette erreur.