Delphi 使用try except的ADOQuery超时

Delphi 使用try except的ADOQuery超时,delphi,tadoquery,adoconnection,Delphi,Tadoquery,Adoconnection,我在表单上有一个ADOQuery和一个ADOConnection,简化代码如下所示: 在Form.Create中,我只需给ADOConnection指定连接参数,并确保它已关闭。 在此之后,我从未直接打开ADOConnection,它只通过ADOQuery发生 try if ADOQuery.Active then ADOQuery.Close; ADOQuery.Open; except Application.Terminate; end; 我希望这段代码能够捕获所有类型的异常(比如

我在表单上有一个ADOQuery和一个ADOConnection,简化代码如下所示:

Form.Create中,我只需给ADOConnection指定连接参数,并确保它已关闭。 在此之后,我从未直接打开ADOConnection,它只通过ADOQuery发生

try
 if ADOQuery.Active then ADOQuery.Close;
 ADOQuery.Open;
except
 Application.Terminate;
end;
我希望这段代码能够捕获所有类型的异常(比如ADOQuery超时),并简单地终止应用程序

不知何故,我仍然收到超过查询超时的消息。(但可能是来自ADOConnection本身?)我不是100%确定

如果我这样做,它能解决问题吗:

try
 if ADOConnection.Connected:=true then ADOConnection.Close;

 if ADOQuery.Active then ADOQuery.Close;
 ADOQuery.Open;
except
 Application.Terminate;
end;
多谢各位

更新

问题是:

这不是捕获查询超时,因为它使用的AdoConnection不在try except块内?(我真的看不到任何其他原因)

在本例中,bellow ADOConnection1在第一个ADOQuery.Open上连接,并保持不变,直到软件完成


这似乎并没有捕获所有查询超时

您正在使用一个表单,这些组件将被正确放置在该表单上

因此,检查
TADOConnection
Connected
属性在IDE中是否为
true


现在,请确保它总是
false
,因为当您创建表单时,此属性将在触发
OnCreate
事件之前“激活/打开”连接。

整个帖子毫无意义。打开连接然后关闭连接没有意义,只会让ADOQuery再次打开它。打开和关闭以及打开和关闭连接也没有意义。在代码开头打开它,并保持打开状态。如果第一次尝试打开连接成功,您就没事了。如果没有,你就在那一点抓住它,你就完成了。@Ken你在哪里看到代码打开,然后关闭,然后再打开?@Jerry:读课文的第二段。然后读取第一个代码块,打开连接,关闭连接,然后使用ADOQuery再次打开连接。如果查询自动打开连接,则在查询关闭时关闭连接。打开连接->关闭连接->打开查询和连接->关闭查询和连接->打开查询和连接->关闭查询和连接根本没有意义。@Jerry:没有。请阅读文本。连接打开,然后立即关闭。然后打开查询(连接被分配到该查询),该查询将再次打开连接。当查询关闭时,它打开的连接将关闭。然后再次打开查询,从而再次打开连接。每次关闭和打开查询时,都要清洗并重复。也许您正在努力解决这些组件在设计时已经打开的问题?适当的解决方案是首先不让它们在设计时连接。
try
 if ADOQuery.Active then ADOQuery.Close;
 ADOQuery.Open;
except
 Application.Terminate;
end;