如何在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
相关产品推荐
相关产品推荐

