我采用的是ADOConnection的异步连接方式,用一个Timer去循环判断ADOConnection的State属性状态以确定是否已连上数据库。在连接的服务器不存在的时候,也就是在ADOConnection的State=stConnecting状态时,我用了ADOConnection的Cancel方式去终止此连接,但发现并不能立即终止接连,原因是Cancel的执行时间不确定(不管在什么时间点终止连接,从开始连接到Cancel执行完的时间正好是ConnectionTimeout的时间值)。
    不知道在异步的情况下,用什么方式能立即有效的终止连接呢?
    谢谢大家!

解决方案 »

  1.   

    ADOConnection1.Connected := false ;
      

  2.   

    楼上两位说的方法我都试过了,结果和用Cancel一样,不能达到立即终止的效果啊。
    不知道还有什么方法能实现呢?
      

  3.   

    想不出更好的办法,把ConnectionTimeout设短一点
      

  4.   

    ConnectionTimeout设短了话,不知道会不会影响正常的连接时间,我设的是20s,如果服务器不在局域网中,一般设成多少最合适呢?
      

  5.   

    呵呵,我也是,异步方式后,如果连不上,超时设置很长的时候, 在连接过程中,发现主窗口关不掉.
    也想找个办法,主动去终止连接,发现不行.后来搞烦了,如果关闭主窗口时,提示后,直接:ExitProcess
      

  6.   

    如果要立即终止连接的话,可以先遍历所有当前
    用到此连接的数据集主件,通通关掉;
    或者直接application.terminated;
      

  7.   

    都差点忘了这个帖了,我后来用的是在Form的Close事件里将窗体隐藏了,然后等它自己去Cancel连接,自动就结束了该进程。不过给用户的感觉是一关闭就凑效了,呵呵