请教高手:程序连接中断,续连问题!!!!!!!!!

jackzhang168 2005-01-06 10:26:10
程序运行过程中,突然中断(可能网络中断,或数据库关闭或重启),客户端程序怎么续连????
要求程序自动报警或续连,手工重新打开程序就不考虑了!
...全文
264 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN_QA 2005-01-12
  • 打赏
  • 举报
回复
/*******************************************************************
函数名称:of_isconnected()
参数: 无
返回值: boolean 是否有效的数据库连接
功能描述:判断是否有效的数据库连接
创建人: XXX
创建日期:0000-00-00
*******************************************************************/
//return this.dbhandle() > 0(这种判断是错误的)
string ls_error

this.syntaxfromsql("select 1", "", ls_error)
if lenw(ls_error) = 0 then
return true
else
return false
end if
jackzhang168 2005-01-10
  • 打赏
  • 举报
回复
CSDN_QA(有问题了) :
首先非常感谢你!!!

我关键是希望能实时的反馈数据库断开报警,并在数据库启动后自动续连

恕本人愚钝,你所说的方法我大概知道了,但有些具体的不是很明白,能否再详细点
象检查是否已连接上数据库(of_isconnected)函数,是通过SQL的返回值来判断吗?
还有注册和反注册函数of_registerdatawindow,of_unregisterdatawindow也不是很明白

再次感谢!!

解决后定当重开帖给分


flyerlxg 2005-01-10
  • 打赏
  • 举报
回复
实时检测数据库的连通性比较占时,而且影响效率,建议在需要使用数据库(比如保存)时,如果发现中断则重连,可以写进数据窗口控件的事件中进行检测。
WorldMobile 2005-01-07
  • 打赏
  • 举报
回复
在MDI窗口的Timer事件里写代码,一分钟触发一次即可

代码可以这样,写一条简单的select语句

判断sqlca.sqlcode是否出错,如果出错,则重新联接数据库即可
TTLOVEYOU3344 2005-01-07
  • 打赏
  • 举报
回复
tongyi qimin168(难得糊涂):fangfajiadan
zhangdatou 2005-01-07
  • 打赏
  • 举报
回复
帮顶`~~
hygougou 2005-01-07
  • 打赏
  • 举报
回复
更好的方法就是ping 服务器代码呀,呵呵~~`
这个应该是不错的了,至少可以排除网络故障

然后如果是服务器没有启动,再写一段代码
校验服务是否运行了
jackzhang168 2005-01-07
  • 打赏
  • 举报
回复
我是想知道还有没有其他的更好的方法
CSDN_QA 2005-01-07
  • 打赏
  • 举报
回复
为了提高性能,SyntaxFromSQL()所带参数请使用'select 1'
CSDN_QA 2005-01-07
  • 打赏
  • 举报
回复
自动重新连接数据库的实现方法:
1.自定义事务对象(n_tr),不要使用transaction
2.在n_tr编写函数检查是否已连接上数据库(of_isconnected)
关键代码:SyntaxFromSQL(),不能根据dbhandle()是否大于0来判断
可重载此函数进行未连接上数据库时提示
3.在n_tr编写函数of_registerdatawindow()(重载函数)注册使用该事务对象的数据窗口控件/数据存储/子数据窗口
4.在n_tr编写函数of_unregisterdatawindow()(重载函数)反注册使用该事务对象的数据窗口控件/数据存储/子数据窗口
5.编写重新连接数据库的函数of_reconnect(),先断开连接,连接方法与正常连接一样
6.从管理上规定不允许在非n_tr对象中编写嵌入式SQL,只允许调用n_tr相关函数(记得提供相关函数,如of_getvalues())
7.在of_getvalues()等函数中调用of_isconnected()判断是否已连接上数据库,如果未连接上调用of_reconnect()重新连接数据库,并循环已注册的数据窗口控件/数据存储/子数据窗口重设事务对象(resettransobject和settransobject)
8.在数据窗口控件/数据存储祖先编写自定义函数of_settransobject()代替系统settransobject(),将数据窗口控件/数据存储/子数据窗口注册到对象事务对象(n_tr.of_registerdatawindow())
9.在数据窗口控件/数据存储祖先destructor编写代码反注册数据窗口控件/数据存储/子数据窗口(n_tr.of_unregisterdatawindow())
10.子数据窗口由于不能建立祖先需使用不可视用户对象,同样建立of_settransobject()代替系统settransobject(),并进行反注册


xlhl 2005-01-07
  • 打赏
  • 举报
回复
Disconnect Using Sqlca;
Connect Using Sqlca;
liuyxit 2005-01-06
  • 打赏
  • 举报
回复
启动TIMER(自己定时间间隔)

在TIME事件写:
if this.DBHandle() = 0 then
//这写重连代码
end if
li_d_s 2005-01-06
  • 打赏
  • 举报
回复
ping的通不一定数据库通的
hygougou 2005-01-06
  • 打赏
  • 举报
回复
给你思路供参考,

网上有个PB实现“PING IP”的例子

再加个timer()

应该不成问题
hchi0118 2005-01-06
  • 打赏
  • 举报
回复
up
hygougou 2005-01-06
  • 打赏
  • 举报
回复
你想简单点,就用 qimin168(难得糊涂) 的方法,
我开始用PB的时候就是这样用的
lijiashu1981 2005-01-06
  • 打赏
  • 举报
回复
在应用当中判断当前应用的错误 如果捕捉到是数据库连接失败方面的错误 那么设置timer 重新连接。
liuyxit 2005-01-06
  • 打赏
  • 举报
回复
那只能用楼上的方法了
「已注销」 2005-01-06
  • 打赏
  • 举报
回复
我帮你顶一下!
用一个SQL语法找一一下数据库,如果没回应再把事务断开,然后再连。
String ls_vlaues
SELECT * INTO ls_values FROM DUAL;
IF Sqlca.Sqlcode <> 0 then
SQLCA.DBMS =
SQLCA.LOGPASS =
……
Disconnect Using Sqlca;
Connect Using Sqlca;
End if
如果可以的话就放点血给我噻!我肚饿得荒啊!
jackzhang168 2005-01-06
  • 打赏
  • 举报
回复
liuyxit(深蓝(O_0)) :
我试过了,好像不可以
不满足Sqlca.DBHandle() = 0条件,始终是38572600,大于0啊

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧