Delphi 中 FireDAC 数据库连接(建立连接)

参见:Delphi 中 FireDAC 数据库连接(总览)

描述了如何使用FireDAC打开和关闭与DBMS的连接。FireDAC提供了TFDConnection组件来帮助你打开一个与数据库的连接。

一、概述

在创建了连接定义后,可以建立与数据库的连接。一般来说,有两种方法可以做到这一点:

  1. 明确地,通过设置TFDCustomConnection.Connected为True或调用Open方法之一。

  1. 隐式的,通过执行任何需要与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组件来允许终端用户输入数据库凭证。登录对话框可以通过以下方式之一进行绑定。

  1. 将TFDGUIxLoginDialog组件放到一个表单中。不需要额外的设置。这个对话框将是一个应用程序的默认登录对话框。

  1. 将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时,对话框会要求输入新密码。

四、关闭连接

该连接可以通过以下方式关闭。

  1. 显式的,通过设置TFDCustomConnection.Connected为False。

  1. 隐式,当连接对象不再有活动的命令和数据集,并且ResourceOptions.KeepConnection为False时。

FireDAC在关闭连接之前完成活动的事务(如果有的话)。使用TxOptions.DisconnectAction来控制执行的动作。

另外,在这之前,TFDCustomConnection.BeforeDisconnect事件被触发。连接关闭后,AfterDisconnect事件被触发。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值