使用ADOConnection连接数据库时,如果异步执行,即其ConnectOptions为coAsyncConnect时,应在什么地方捕获异常呢?要知道,异步连接时,函数返回时,连接还没有执行,象下面这样的代码(BCB)是捕获不到异常的:
try
{
    ADOConnection->Open(User,Pwd);
}
catch(...)
{
}
其实不光数据库连接,Delphi/C++Builder编程中很多涉及异步操作的地方,都可能需要考虑这样的问题。请问各位大虾,有没有通用的解决方案呢?

解决方案 »

  1.   

    在异步方式中, ADO会以OnFetchProgress事件来通知应用程序ADO还在处理
    数据之中,并且以OnFetchComplete事件来通知应用程序ADO已经处理数据完毕了。可以在OnFetchProgress事件中捕捉异常。
      

  2.   

    同意 yuhouyangguang(雨后阳光) (
      

  3.   

    谢谢yuhouyangguang(雨后阳光)和 theone_jxm()。不过我还是有些不明白。是更改EventStatus参数吧,OnFetchProgress事件我没有试过,但我试过ADOConnection的OnConnectComplete事件,把EventStatus改为esOK,结果没用,窗体关闭的时候,异常还是冒出来。还望二位及其他高人指点。