我的思路是在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 这个属性不成功啊?!
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 这个属性不成功啊?!
不知你要做什么,你可以先断开,重新联接。
或都还有一个办法,如果sqlserver 可以每次执行一个select getdate()这样的语句,如果成功表示联接正常否则不正常。其它数据库你自己看吧。
我也没有好办法,等待高手
只要物理上的连接不断,网络不会中断的.
像你那样考虑的话,即使现在网络没有连接到数据库,你用了Query的open这样的方法,也会是这个连接激活的,一般的问题不在网络的连接,而在于程序的设计
成功证明是连接的,
失败是已经中断了。