Etablissement d'une connexion (FireDAC)
Remonter à Utilisation des connexions (FireDAC)
Décrit comment ouvrir ou fermer une connexion à un SGBD en utilisant FireDAC. FireDAC fournit le composant TFDConnection pour vous aider à ouvrir une connexion à une base de données.
Sommaire
Informations générales
Quand une définition de connexion a été créée, la connexion à une base de données peut être établie. Il existe en général deux façons de procéder :
- explicitement, en définissant TFDCustomConnection.Connected sur True ou en appelant l'une des méthodes Open.
- implicitement, en réalisant une action qui exige une communication avec un SGBD. Par exemple, en définissant la propriété Active du TFDQuery sur True. Notez que ResourceOptions.AutoConnect doit avoir la valeur True. Sinon, une exception est déclenchée.
FireDAC fournit plusieurs méthodes TFDCustomConnection.Open en supplément de la propriété Connected. Ces méthodes vous permettent d'utiliser une chaîne de connexion FireDAC, c'est-à-dire une chaîne au format param=value[;...param=value]
. Par exemple :
FDConnection1.Open('DriverID=SQLite;Database=c:\test.sdb;Password=12345');
L'événement BeforeConnect est déclenché avant l'ouverture de la connexion. Une fois la connexion établie, l'événement AfterConnect est déclenché.
Gestion des erreurs de connexion
Si l'établissement de la connexion échoue, une application peut analyser l'échec à l'aide de l'une des approches suivantes :
- en utilisant le gestionnaire d'événément TFDCustomConnection.OnError. Cette approche est plus appropriée lorsqu'une connexion est ouverte implicitement.
- en utilisant la syntaxe try ... except ... end. Il s'agit de la meilleure approche lorsqu'une connexion est établie explicitement. Par exemple :
uses
FireDAC.Stan.Consts, FireDAC.Stan.Error;
...
try
FDConnection1.Connected := True;
except
on E: EFDException do
if E.FDCode = er_FD_ClntDbLoginAborted then
; // user pressed Cancel button in Login dialog
on E: EFDDBEngineException do
case E.Kind of
ekUserPwdInvalid: ; // user name or password are incorrect
ekUserPwdExpired: ; // user password is expired
ekServerGone: ; // DBMS is not accessible due to some reason
else // other issues
end;
end;
Remarque : La boîte de dialogue de connexion gère automatiquement le type d'erreur
ekUserPwdInvalid
, en suggérant à l'utilisateur de saisir à nouveau les informations d'identification de la connexion. Pour désactiver ce paramètre, définissez TFDGUIxLoginDialog.LoginRetries sur -1. L'erreurekUserPwdExpired
est également gérée automatiquement en suggérant à l'utilisateur de saisir à nouveau le mot de passe.
En outre, si la récupération de la connexion est configurée, le type d'erreur ekServerGone
amène une connexion dans un état hors ligne. Sinon, la méthode TFDCustomConnection.Ping peut être utilisée pour éviter l'erreur ekServerGone
et rendre la connexion active, si un SGBD est disponible.
Pour plus de détails, voir "Gestion des erreurs".
Utilisation de la boîte de dialogue de connexion
L'application GUI peut utiliser le composant TFDGUIxLoginDialog pour permettre aux utilisateurs finaux de saisir les informations d'identification de la base de données. La boîte de dialogue de connexion peut être liée selon l'une des méthodes suivantes :
- Déposez le composant
TFDGUIxLoginDialog
sur une fiche. Aucune configuration supplémentaire n'est requise. Cette boîte de dialogue servira de boîte de dialogue de connexion par défaut pour une application. - Déposez le composant
TFDGUIxLoginDialog
sur une fiche et définissez TFDCustomConnection.LoginDialog dans cette boîte de dialogue. La boîte de dialogue fera l'objet d'une utilisation privée par cette connexion.
La boîte de dialogue de connexion est automatiquement invoquée par TFDCustomConnection, quand LoginPrompt = True :
Utilisez la propriété TFDGUIxLoginDialog.VisibleItems pour spécifier les paramètres de définition de connexion à montrer à l'utilisateur final et comment les nommer. La dernière option vous permet de localiser la boîte de dialogue de connexion. Par exemple, les développeurs SQL Server germanophones peuvent spécifier :
with FDGUIxLoginDialog1.VisibleItems do begin
Clear;
Add('Server');
Add('User_name=Benutzer');
Add('Password=Kennwort');
Add('OSAuthent');
end;
FDConnection1.LoginDialog := FDGUIxLoginDialog1;
FDConnection1.Connected := True;
Quand un SGBD prend en charge l'expiration de mot de passe, que le mot de passe a expiré et que TFDGUIxLoginDialog.ChangeExpiredPassword a la valeur True, la boîte de dialogue demande un nouveau mot de passe.
Fermeture d'une connexion
La connexion peut être fermée selon l'une des méthodes suivantes :
- explicitement, en définissant TFDCustomConnection.Connected sur False.
- implicitement, quand l'objet connexion n'a plus de commande active, quand les ensembles de données et ResourceOptions.KeepConnection ont la valeur False.
FireDAC termine les transactions actives, le cas échéant, avant la fermeture de la connexion. Utilisez TxOptions.DisconnectAction pour contrôler l'action réalisée.
L'événement TFDCustomConnection.BeforeDisconnect est également déclenché avant la fermeture. Une fois la connexion fermée, l'événement AfterDisconnect est déclenché.