You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TFDConnection的OnLogin事件中终止连接尝试?

TFDConnection OnLogin事件终止连接及退出应用的解决方法

终止连接尝试的正确方式

OnLogin事件确实没有返回值来控制连接流程,抛出异常是官方认可的中断方式——FireDAC会自动捕获OnLogin中抛出的异常,终止后续的连接尝试,不会继续执行连接逻辑。这是Delphi组件事件处理的常规设计(无返回值的事件通过异常中断流程),无需专门文档说明。

处理Cancel按钮的具体实现

假设你用自定义密码对话框,用户点击Cancel时直接抛出异常即可。示例代码(Delphi):

procedure TMainForm.FDConnection1Login(Sender: TObject);
var
  dlgPassword: TfrmPassword;
begin
  dlgPassword := TfrmPassword.Create(Self);
  try
    // 显示密码对话框,用户点Cancel则ShowModal返回mrCancel
    if dlgPassword.ShowModal <> mrOk then
    begin
      // 抛出异常终止连接,自定义异常信息方便后续判断
      raise EDatabaseError.Create('用户取消登录');
    end;
    // 用户输入密码后,设置到连接参数
    FDConnection1.Params.Values['Password'] := dlgPassword.edtPwd.Text;
  finally
    dlgPassword.Free;
  end;
end;

连接失败/取消后退出应用

如果要在登录取消或失败时直接退出应用,可以在全局异常处理中捕获这个异常并触发退出:

procedure TMainForm.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
  // 判断是否是登录取消的异常
  if (E is EDatabaseError) and (E.Message = '用户取消登录') then
  begin
    ShowMessage('登录已取消,应用即将退出');
    // 正常终止应用,确保资源释放
    Application.Terminate;
    // 如果需要强制退出,可用Halt(0),但不推荐,会跳过资源清理
    // Halt(0);
  end;
end;

也可以直接在OnLogin事件抛出异常后立即调用Application.Terminate,但放在全局异常处理里更灵活,能统一处理其他连接异常场景。

内容的提问来源于stack exchange,提问作者user3161924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:07:02