描述了如何使用FireDAC打开和关闭与DBMS的连接。FireDAC提供了TFDConnection组件来帮助你打开一个与数据库的连接。
一、概述
在创建了连接定义后,可以建立与数据库的连接。一般来说,有两种方法可以做到这一点:
明确地,通过设置TFDCustomConnection.Connected为True或调用Open方法之一。
隐式的,通过执行任何需要与DBMS对话的动作。例如,通过设置链接的TFDQuery Active属性为True。请注意,ResourceOptions.AutoConnect必须是True,否则会产生一个异常。
FireDAC提供了几个TFDCustomConnection.Open方法,这是对Connected属性的补充。这些方法允许你使用FireDAC连接字符串,它是一个字符串,形式为param=value[;...param=value]。
例如:
FDConnection1.Open('DriverID=SQLite;Database=c:\test.sdb;Password=12345');
BeforeConnect事件在连接被打开之前被触发。连接建立后,AfterConnect事件被触发。
二、处理连接错误
如果连接建立失败,那么应用程序可以使用其中一种方法来分析失败。
使用TFDCustomConnection.OnError事件处理程序。当连接是以隐式方式打开时,这种方法更合适。
使用 try ... except ... end 语法。这是在显式连接建立时的最佳方法。比如说:
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;
注意:
登录对话框自动处理错误类型ekUserPwdInvalid,建议用户再次输入登录凭证。要禁止这种处理,请将TFDGUIxLoginDialog.LoginRetries设置为-1。ekUserPwdExpired错误也被自动处理,建议用户再次输入密码。
另外,如果设置了连接恢复,那么错误类型ekServerGone会使连接进入初始离线状态。另外,TFDCustomConnection.Ping方法可以用来避免ekServerGone错误并使连接处于活动状态,当DBMS可用时。
三、使用登录对话框
GUI应用程序可以使用TFDGUIxLoginDialog组件来允许终端用户输入数据库凭证。登录对话框可以通过以下方式之一进行绑定。
将TFDGUIxLoginDialog组件放到一个表单中。不需要额外的设置。这个对话框将是一个应用程序的默认登录对话框。
将TFDGUIxLoginDialog组件放到一个表单中,并将TFDCustomConnection.LoginDialog设置为这个对话框。该对话框将被这个连接私下使用。
当LoginPrompt = True时,登录对话框会被TFDCustomConnection自动调用。
使用TFDGUIxLoginDialog.VisibleItems属性,你可以指定向最终用户显示哪些连接定义参数以及如何命名它们。最后一个选项允许你对登录对话框进行本地化。例如,讲德语的SQL Server开发人员可以指定。
with FDGUIxLoginDialog1.VisibleItems do begin
Clear;
Add('Server');
Add('User_name=Benutzer');
Add('Password=Kennwort');
Add('OSAuthent');
end;
FDConnection1.LoginDialog := FDGUIxLoginDialog1;
FDConnection1.Connected := True;
当DBMS支持密码过期,密码过期,并且TFDGUIxLoginDialog.ChangeExpiredPassword为True时,对话框会要求输入新密码。
四、关闭连接
该连接可以通过以下方式关闭。
显式的,通过设置TFDCustomConnection.Connected为False。
隐式,当连接对象不再有活动的命令和数据集,并且ResourceOptions.KeepConnection为False时。
FireDAC在关闭连接之前完成活动的事务(如果有的话)。使用TxOptions.DisconnectAction来控制执行的动作。
另外,在这之前,TFDCustomConnection.BeforeDisconnect事件被触发。连接关闭后,AfterDisconnect事件被触发。