在程序运行中,如何得知sqlsrever服务器已经异常断开,手工连接好网络后,如何让程序不重新运行而得知连接已正常,不再继续报‘无法连接网络’的错误。(200分

  • 主题发起人 主题发起人 shangshang
  • 开始时间 开始时间
S

shangshang

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序运行中,如何得知sqlsrever服务器已经异常断开,手工连接好网络后,如何让程序不重新运行而得知连接已正常,不再继续报‘无法连接网络’的错误。(200分)<br />再编辑过程中,假如网线掉了,这时POST会出错,然后再把网线接上,继续刚才的POST,
发现仍然报无法连接的错。程序共用一个ADOCONNECTION,网线断开时它的CONNECTED属性依然为
true, 奇怪。

怎么样让我的POST不再报错呢,当然,重启动程序除外。可以不能老刷新ADOCONNECTION吧。
敬请高手指点。 分数不成问题
 
先断凯连接,在连接上
 
我觉的不太可行吧,总不能在所有的POSTERROR 和 try 块里都把Adoconnection断开重连一次吧。
假如一直断着,响应岂不是很慢?
 
我想你可以在BeforePost时做一下检测,如果正常就继续,如果不正常就重新连接,然后再POST。
 
如何检测呢? 还要把connection重连一次吗?
 
有点意思,关注一下。
 
加一个Timer控件,加入网络检测代码,开始时关闭它,网络不通时把它开启,当网络通时也关闭
 
还是哪个问题,如何检测呢?

ping?
connction.open?
 
网络中断和恢复,程序的自适应问题是个老话题了。用ping是一个办法,但是ping不能解决
进程吊死的问题。用connection.open比较浪费资源,把间隔时间设长点算了。
 
好像没什么太好的通用的方法,sql server也可以通过命名通道连接,
这时候就不能ping 了。这个和不同协议的,服务器、客户端的超时设置有关。
 
退出,重新启动程序。
这可是最好的通用方法
 
pmlpml
:谢谢你在这里活跃气氛。呵呵
 
在重新设置一个databaes的参数或Ado的系统参数就OK了.
 
一个程序中,一般有无数Post,除非你每次都管理连接状态。
即使这样,不同条件下,如Cursor的使用方法,错误处理的方法也不一样。
我认为在特定情况下,处理连接中断是可行的。通用的不存在。
 
在所有的POSTERROR 和 try 块里都把Adoconnection,如果出错的话,就捕捉异常信息,
如果发现是网络连接的错误信息,就重连一次
 
如果每次都AdoConnection的话不是一个好办法,其实在Ado中可以捕捉到各种异常信息,
只要判断异常的情况,如果是连接问题就重连一次。
 
怎么样判断出错误信息是连接错误呢。能写一点code吗?
 
以下代码可以显示各种Provider的错误(包括和数据库服务器互动时发生的错误):
procedure TForm1.ShowADOErrors;
var
adoErrors : Errors;
adoError : Error;
iCount : Integer;
begin
adoErrors := ADOConnection1.Errors;

for iCount := 0 to adoErrors.Count - 1 do // Iterate
begin
adoError := adoErrors.Item[iCount];

lbADOErrors.Items.Add('Error Number : ' + IntToStr(adoError.Number));
lbADOErrors.Items.Add('Error Source : ' + adoError.Source);
lbADOErrors.Items.Add('Error Description : ' + adoError.Description);
lbADOErrors.Items.Add('Error HelpFile : ' + adoError.HelpFile);
lbADOErrors.Items.Add('Error SQLState : ' + adoError.SQLState);
lbADOErrors.Items.Add('Error NativeError : ' + IntToStr(adoError.NativeError));
end; // for
end;
 
哪个才是说明是网络不通呢?
 
有意思, 关注
 
后退
顶部