我有一个用Delphi编写的应用程序,它使用iSeries ODBC连接。
有些工作站我不想安装iSeries软件,在这些工作站上,我不会更新任何这些数据库。
生成此错误消息时是否可以捕获?此时,我可以将NoUpload之类的变量设置为true,并且不允许工作站上的连接。
它似乎发生在我尝试打开其中一个表之前 - 只需在应用程序启动时设置ConnectionString即可触发消息。
提前致谢!
答案 0 :(得分:4)
答案 1 :(得分:3)
理想情况下,您应该寻找一个选项来检查您的状况而不会引发异常。所以Sir Rufo's answer是一个很好的起点。
另一种选择可能是不在ConnectionString
中包含提供程序,而是在运行时通过Provider
属性独立设置(最有可能仅在确认支持后)。
但是,由于您提到在尝试打开表之前遇到异常,因此需要检查一些事项(假设您在设计时已经设置了组件):
Active
?如果不能解决上述问题,您可以为应用程序异常提供一个钩子。 (而且真的是最后的努力。)
使用以下签名声明处理程序方法:TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
。并将其分配给Application.OnException
。 E.g。
procedure Handle(ASender: TObject; E: Exception);
begin
if ISeriesNotInstalledError(E) then
begin
FNoUpload := True;
end
else
begin
Application.ShowException(E);
end;
end;
注意:遵循此方法有一些重要的注意事项。由于您将此视为标准用例,因此您不希望使用消息来打扰您的用户。这也比局部异常处理程序(一个常见的编程错误)好得多,因为如果调用程序例程触发了这个错误,你不希望调用程序错误地运行就像没有出错一样;什么时候很清楚。