数据库连接断开后如何自动重连?(200分)

  • 主题发起人 主题发起人 jeansonliu
  • 开始时间 开始时间
J

jeansonliu

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据库是远程的,通过ADSL和花生壳直接连接。但是由于网络不稳定,所以经常断开。我在每次动作之前都增加了检查adoconnection连接情况的判断,如果connected不为true,就设置成true(比如一个打开某个查询表格按钮的onclick的第一行)。但是打开ADO数据集的时候还是提示“连接失败”,这是为什么呢?还有像我这种情况,各位高手看看是否有比较好的解决方法呢?多谢了!!!
 
//这是我写的一个定时返回数据库时间的程序,可能有点帮忙吧<br>function TForm1.getSrvTime: TDateTime;<br>var nowdatetime:tdatetime;<br>qry:TADOQuery ;<br>cmdstr:string;<br>begin<br>cmdstr:=' select getdate() ' &nbsp;;<br>try<br>&nbsp; form1.con1.Open ;<br>&nbsp; except<br>&nbsp; end;<br>&nbsp; &nbsp; while not form1.con1.Connected do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp;try<br>&nbsp; &nbsp;con1.Close;<br>&nbsp; form1.con1.Open ;<br>&nbsp; except<br>&nbsp; end;<br>&nbsp; &nbsp; end;<br><br>&nbsp; qry:=tadoquery.Create(self);<br>&nbsp; qry.Connection :=form1.con1;<br>&nbsp; try<br><br>&nbsp; With qry do<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; Close;<br>&nbsp; &nbsp; &nbsp; &nbsp; SQL.Clear;<br>&nbsp; &nbsp; &nbsp; &nbsp; SQL.Add(cmdstr) ;<br>&nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; open;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; except<br>&nbsp; &nbsp; if not qry.Active then<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; qry.Active:=true;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; end;<br>&nbsp; &nbsp;qry.First ;<br>&nbsp; &nbsp;nowdatetime:=qry.Fields[0].AsDateTime;<br>&nbsp; &nbsp;result:=nowdatetime;<br><br>end;
 
连接断开以后,每个adoquery都得再重新设置一下connection属性?
 
如果是开始运行时,数据库连接是良好的,在程序运行过程中,数据库连接被外界原因中断, &nbsp; <br>&nbsp; 如:将客户端机器网线拔出后再插上,此时,客户端的ADOCONNECTION组件的CONNECTED属性仍为TRUE, &nbsp; <br>&nbsp; 但实际上,客户端与数据库服务器的连接已中断,再执行数据库操作时,会报错的<br><br>所以不仅连接断开以后的查询,而且是在可能会断开的代码查询数据库前都重新连接一次数据库,这样肯定会防止数据库“伪连接”
 
除了用一个时间控件不停的检测,还有什么方法方便的知道连接已经断开了吗?因为感觉用时间控件不停的检测,效率不高。
 
数据集组件与ADOCONN的连接采用动态连接方式,数据集组件连接的时候可以判断一下ADOCONN的状态。操作完成后释放动态连接,保证正常的资源的申请和释放。这样应该就没问题了。
 
可以使用MiddleADO开发套件,在原有的ADO组件开发基础上快速移植<br>完全解决网络断线,以及Internet上数据库应用的弊端,比如速度、安全性,还有连接池的问题。<br>可下载免费版本用: http://www.midado.cn
 
后退
顶部