在一个erp系统中:
   局域网中一客户端,一个adoquery通过adoconnection连接到sql server
 一个按狃中写到:
begin
 try
   adoquery1.close; adoquery1.sql.clear;
   adoquery1.sql.add('select * from t_1');
   adoquery1.open;
   showmessage('Succeed');
  except
    showmessage('Error');
  end;
end;程序运行,我点击按钮。程序正常执行。
这时候 我把网线拔掉。再点按钮,提示错误。
到这里,都正常。但是,此时 我把网线接上去,再点击按钮, 还是提示 错误???要怎么判断 连接到sql server是否正常?????
              

解决方案 »

  1.   

    sqlserver是tcp链接的 ,你可以 adocinnection.open测试测试
      

  2.   

    查询失败,应该就认为连接断掉,可以重新连接。
    begin
    try
        if not adoconnection.connected then adoconnected.connected := true;
        adoquery1.close; adoquery1.sql.clear;
        adoquery1.sql.add('select * from t_1');
        adoquery1.open;
        showmessage('Succeed');
      except
        adoconnection.connected := false;
        showmessage('Error');
      end;
    end;
      

  3.   

    因为你用qry控件查询的结果。因为qry查询要建立在数据库连接的基础之上,数据库连接有database去连接。当你进入系统后,这个时候database已经被连接上了,而后你又把线拔了,错误上database还在连接。但当你你要查询的时候建立在database连接上的查询就会失败。如果楼主把网线拔了等会,系统应该会报失去数据库连接。不信你试试。
      

  4.   

    网线拔掉后
    执行 adoquery1.open
    报错我把网线接上  执行adoquery1.open还是报错问题是:我把网线接上后,怎么才能正确执行adoquery1.open??????我把adoconnection里面的connectionstring在程序中重新赋值 也不行呀.
      

  5.   

    try
      adoquery1...
      ..正常情况下你要执行的操作或一个测试连接查询
       比如查下系统时间之类
    except
      try 
        adoconnection1.close;
        adoconnection.connected:=true;
        ..你要执行的操作
      except
        messagebox(handle,'网络已断开','连接失败',mb_ob+mb_iconerror);
      end;
    end;
      
      

  6.   

    ping 羅,connedted 很慢的,設置timeout也不是好方法。
      

  7.   

    先ping 
    ping通的情况下 在执行一个语句
    执行之前要把adoconnection.connected:=false
    在true一下
      

  8.   

    我的方法有五六种,有速度快的,有速度慢的,有防止ADO版本冲突,有断线续接的,反正这几天为了解决这些个事整出来的东东.需要的话发这里[email protected].如果你喜欢ADOCONNECTION的话,那够呛!