【发布时间】:2015-08-14 09:32:14
【问题描述】:
我在这里使用了一个示例:
这样做了:
procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
with FDGUIxLoginDialog1.VisibleItems do begin
Clear;
Add('Server=Strežnik');
Add('User_name=Uporabnik');
Add('Password=Geslo');
Add('Database=Baza');
end;
try
FDConnection1.Connected := True;
except
on E: EAbort do
application.terminate; // 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;
end;
但是,在登录对话框中点击取消后,应用程序不会终止,而是显示我的主表单。我应该怎么做才能纠正这个?
另外,在这种情况下,如果密码错误,我该如何闪烁消息?
Firedac 正在连接到 SQL Server。
ps
即使这样也行不通:
.....
except
on E: EFDDBEngineException do
if E.Kind = ekUserPwdInvalid then
begin
ShowMessage('A user name or a password are invalid');
Abort;
end;
【问题讨论】:
-
您是否将相关单元/组件添加到数据模块中? (SQLServer 驱动程序和等待光标?)
-
这只会在点击对话框上的取消按钮产生异常时起作用。你应该调试它来检查。即使发生了,如果异常不是 EAbort 或 EFDDBEngineException 而是其他一些异常,在这种情况下什么都不会发生
-
我不确定您期望在这里发生什么。您正在寻找的
EAbort异常只会在如果在数据库组件最初尝试建立连接的确切时刻引发异常。如果您希望应用程序在他们点击取消按钮时终止,那么您必须单独实现。再往下,抛出EAbort不会导致应用程序本身终止——你必须在某个地方捕捉到它并用它做一些事情(如果这是一种停止应用程序的明智方法,它可能不是) -
使用“on E: EFDException do if E.FDCode = er_FD_ClntDbLoginAborted then Application.Terminate”而不是“on E: EAbort ...”