我的思路是在ADO头次连接时候把定时器打开,每10秒触发一次timer.timer
procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
begin
   timer1.Enabled:=true;
end;//TIMER事件,每10秒执行一下,为什么连接成功后我把网络断开ADOConnection1.Connected这个属性还是一直是true啊????procedure TForm1.Timer1Timer(Sender: TObject);
begin
   if not ADOConnection1.Connected then  
     begin
       label2.Caption:='连接失败';
       timer1.Enabled:=false;
       if Application.MessageBox('数据库连接超时,是否尝试重新连接?','提醒',MB_YESNO+MB_ICONQUESTION)=IDYES then
         begin
            Form1.ConnectDataBase;
         end;
     end
   else
     begin
       checknum:=checknum+1;
       label3.Caption:=inttostr(checknum);
     end;
end;//如何检测ADO连接状态呢?ADOConnection1.Connected 这个属性不成功啊?!

解决方案 »

  1.   

    因为开始就联接成功,所以connected的属性将一直保持true.
    不知你要做什么,你可以先断开,重新联接。
    或都还有一个办法,如果sqlserver 可以每次执行一个select getdate()这样的语句,如果成功表示联接正常否则不正常。其它数据库你自己看吧。
    我也没有好办法,等待高手
      

  2.   

    我想网络的性能比较我们预料的要好很多,你用了keepconnection的话,连接是保持的,
    只要物理上的连接不断,网络不会中断的.
    像你那样考虑的话,即使现在网络没有连接到数据库,你用了Query的open这样的方法,也会是这个连接激活的,一般的问题不在网络的连接,而在于程序的设计
      

  3.   

    执行一个SQL语句来判断,
    成功证明是连接的,
    失败是已经中断了。