一个很棘手的问题~~~贴了一月了至今尚未解决的缩短连接超时时间的问题~~高手请进~~~ ( 积分: 20 )

  • 主题发起人 主题发起人 xiang8410
  • 开始时间 开始时间
X

xiang8410

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是本人写的连接数据库的代码,可以连接,但想在连接不上的情况下尽快提示出信息(默认是15S,但本人想设为5S,在5S内还连接不上数据库就自动提示重新连接),小弟设置了connectiontimeout,还有commandtimeout,结果都不能实现所要的功能.都得等15S.(不想用线程与定时器的方法).请教高手们出出主意(麻烦在以下代码帮忙修改一下以实现其功能)<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;&nbsp;connstr:string;<br>begin<br>connstr&nbsp;:='Provider=SQLOLEDB.1;Persist&nbsp;Security&nbsp;Info=false;User&nbsp;ID=sa;Password=123;Initial&nbsp;Catalog=wy_2007SPTest;Data&nbsp;Source=.;Connection&nbsp;Timeout=5';<br>ADOConnection1.ConnectionString:=connstr;<br>ADOConnection1.ConnectionTimeout:=5;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection1.Connected:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery1.Connection&nbsp;:=&nbsp;ADOConnection1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource1.DataSet:=ADOQuery1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGrid1.DataSource:=DataSource1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery1.SQL.Add('select&nbsp;*&nbsp;from&nbsp;设备资料');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery1.Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(self.Handle,'数据库连接失败,请重新连接','注意',mb_ok);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Terminate;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>end;
 
我也遇到相同问题了,也是一直没有解决,希望解决后也告诉我一下
 
直接判断&nbsp;&nbsp;&nbsp;if&nbsp;ADOConnection1.Connected&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beign<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>这样不可以么
 
不可以~~~
 
我试了一下,用ConnectionTimeout就可以了<br><br>新建一工程,在窗体上放ADOConnection1、Button1、Button2属性全部默认<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>const<br>&nbsp;&nbsp;CntStr&nbsp;=&nbsp;'Provider=SQLOLEDB.1;Persist&nbsp;Security&nbsp;Info=false;User&nbsp;ID=sa;Password=123;Initial&nbsp;Catalog=wy_2007SPTest;Data&nbsp;Source=.';<br>var<br>&nbsp;&nbsp;I:&nbsp;DWord;<br>begin<br>&nbsp;&nbsp;ADOConnection1.ConnectionString&nbsp;:=&nbsp;CntStr;<br>&nbsp;&nbsp;ADOConnection1.ConnectionTimeout&nbsp;:=&nbsp;15;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;:=&nbsp;GetTickCount;<br>&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection1.Open;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;Button1.Caption&nbsp;:=&nbsp;IntToStr(GetTickCount&nbsp;-&nbsp;I);<br>&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TForm1.Button2Click(Sender:&nbsp;TObject);<br>const<br>&nbsp;&nbsp;CntStr&nbsp;=&nbsp;'Provider=SQLOLEDB.1;Persist&nbsp;Security&nbsp;Info=false;User&nbsp;ID=sa;Password=123;Initial&nbsp;Catalog=wy_2007SPTest;Data&nbsp;Source=.';<br>var<br>&nbsp;&nbsp;I:&nbsp;DWord;<br>begin<br>&nbsp;&nbsp;ADOConnection1.ConnectionString&nbsp;:=&nbsp;CntStr;<br>&nbsp;&nbsp;ADOConnection1.ConnectionTimeout&nbsp;:=&nbsp;5;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;:=&nbsp;GetTickCount;<br>&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection1.Open;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;Button2.Caption&nbsp;:=&nbsp;IntToStr(GetTickCount&nbsp;-&nbsp;I);<br>&nbsp;&nbsp;end;<br>end;<br><br>结果Button1.Caption为15***-16***&nbsp;&nbsp;15-16秒<br>Button2.Caption为5***-6***&nbsp;5-6秒<br><br>所以说ConnectionTimeout是有用的,是不是其它什么不对呢
 
ANiDelphi&nbsp;您好!!!!<br>我直接复制你的代码到我的一个新建的应用程序中~~~运行后Buttun显示都是14****-15***<br>会不会是因为我的数据库问题?你调试上面那个程序的时候是不是新建的一个空数据库?
 
用ANiDelphi代码&nbsp;测试了一下,&nbsp;结果同ANiDelphi的一样,&nbsp;<br>测试环境:&nbsp;delphi7&nbsp;build&nbsp;8.1&nbsp;+&nbsp;winxp&nbsp;sp2
 
我在自己重新测试了一下~~结果也是15秒左右~~但在同事的机子上测试了一下,结果是同ANiDelphi一样~~真是有点郁闷~~~~~问题会是出现在哪呢~~~~~那是不是直接设置connectiontimeout就可以实现短时间内返回提示了?????????还望高手继续指导一下
 
我终于知道原因了~~~~问题是出在自己的机子上~~~~~~~我到同事的机子上测试,只要直接设置adoconnetiontimeout为五秒就会在5-7秒后返回~~~~~不过设置为2秒的话还是要5-7秒才能返回~~~至于原因我也不知道了~~~~~还有我的机子会测试不出来~~我也不知道是何原因~<br>这个就等以后有高手去解决吧~~~~~~~~谢谢楼上几位了~~~特别是ANiDelphi~~~~~结贴了~~~~~~~
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
939
SUNSTONE的Delphi笔记
S
后退
顶部