跪求PB8 断线自动重连数据库MSSQL

banlee 2013-07-16 01:51:47
PB8如何实现网络重新恢复后,系统自动重新连接数据库MSSQL呢?在线等,谢谢!!
...全文
1960 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
WellSoft 2015-09-30
  • 打赏
  • 举报
回复
引用 楼主 banlee 的回复:
PB8如何实现网络重新恢复后,系统自动重新连接数据库MSSQL呢?在线等,谢谢!!
用两个函数基本上解决此世纪难题: //==================================================================== // 函数: of_ReConnectDB() //-------------------------------------------------------------------- // 描述: 重新连接数据库 //-------------------------------------------------------------------- // 参数: //-------------------------------------------------------------------- // 返回: integer //-------------------------------------------------------------------- // 作者: 威迅科技 日期: 2015-09-29 14:49 //-------------------------------------------------------------------- // Copyright © 2000-2020, All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== n_ws_dbservice lnv_dbsrv Integer li_RtValue,li_Value Integer li_i,li_Count window lw_sheet[] n_ws_attrib_class lnv_attrib SELECT Col INTO :li_Value FROM ( SELECT 1 AS Col ) t1; /*判断是否能连接数据库*/ IF IsNull(li_Value) THEN li_Value = 0 IF li_Value = 1 THEN RETURN NO_ACTION lnv_attrib.sTitle = "连接数据库" lnv_attrib.sTips = "正在重新连接数据库,请稍候..." lnv_attrib.sPicture = "Images\ConnectDB.gif" of_PromptTips(TRUE,lnv_attrib) IF SQLCA.of_IsConnected() THEN SQLCA.of_DisConnect() /*断开原来的连接*/ lnv_dbsrv = CREATE n_ws_dbservice li_RtValue = lnv_dbsrv.of_InitConnect(is_AppIniFile) /*初始化数据库连接参数*/ IF li_RtValue = SUCCESS THEN li_RtValue = lnv_dbsrv.of_ConnectDB() /*连接数据库*/ IF li_RtValue = SUCCESS THEN IF IsValid(iw_frame) THEN IF IsValid(iw_frame.inv_sheetManager) THEN li_Count = iw_frame.inv_sheetManager.of_GetSheets(lw_sheet[]) /*取得sheet窗口*/ FOR li_i = 1 TO li_Count of_ReConnectDB_Object(lw_sheet[li_i]) /*循环sheet窗口*/ NEXT END IF END IF END IF END IF IF IsValid(lnv_dbsrv) THEN DESTROY lnv_dbsrv of_PromptTips(FALSE) RETURN li_RtValue //==================================================================== // 函数: of_ReConnectDB_Object() //-------------------------------------------------------------------- // 描述: 重新连接数据库 //-------------------------------------------------------------------- // 参数: // value PowerObject apo_Object //-------------------------------------------------------------------- // 返回: integer //-------------------------------------------------------------------- // 作者: 威迅科技 日期: 2015-09-29 23:41 //-------------------------------------------------------------------- // Copyright © 2000-2020, All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== Window lw_sheet Tab ltb_Tab UserObject luo_Object u_dw ldw_dw Integer li_i,li_Count CHOOSE CASE apo_Object.TypeOf() CASE Window! lw_sheet = apo_Object li_Count = UpperBound(lw_sheet.Control[]) FOR li_i = 1 TO li_Count of_ReConnectDB_Object(lw_sheet.Control[li_i]) NEXT CASE Tab! ltb_Tab = apo_Object li_Count = UpperBound(ltb_Tab.Control[]) FOR li_i = 1 TO li_Count of_ReConnectDB_Object(ltb_Tab.Control[li_i]) NEXT CASE UserObject! luo_Object = apo_Object li_Count = UpperBound(luo_Object.Control[]) FOR li_i = 1 TO li_Count of_ReConnectDB_Object(luo_Object.Control[li_i]) NEXT CASE DataWindow! ldw_dw = apo_Object IF IsValid(ldw_dw.inv_linkage) THEN ldw_dw.inv_linkage.of_SetTransObject(SQLCA) ELSE IF ldw_dw.Visible THEN ldw_dw.of_SetTransObject(SQLCA) END IF END IF END CHOOSE RETURN SUCCESS
zhangyangziwo 2013-08-28
  • 打赏
  • 举报
回复
改为 settrans 就没法使用事务啦 我觉得没有人能承受这一点。
liyi830 2013-08-08
  • 打赏
  • 举报
回复
所有 settransobject 代码的地方 修改为 settrans
banlee 2013-08-02
  • 打赏
  • 举报
回复
lzp_lrp 你好 tnsping具体是怎么实现呢?谢谢
banlee 2013-07-24
  • 打赏
  • 举报
回复
lzp_lrp 你好 tnsping具体是怎么实现呢?谢谢
sbks 2013-07-22
  • 打赏
  • 举报
回复
把连接改成用到时再连接,不要长时连接,就可以最大程序避免掉线时的不友好了.
WorldMobile 2013-07-22
  • 打赏
  • 举报
回复
引用 6 楼 banlee 的回复:
谢谢版主的回复,还想问版主一个问题,第一次连接数据库失败的时候connect需要等待很长时间,起码1分钟时间,请问这个时间能缩短吗?
可以尝试在连接之前用tnsping之类的试一下 (可以在代码中实现)
banlee 2013-07-22
  • 打赏
  • 举报
回复
我想再问问,连接数据库失败的时候connect需要等待很长时间才弹出错错误,起码1分钟时间,请问这个时间能缩短吗?
zhangyangziwo 2013-07-21
  • 打赏
  • 举报
回复
多层吧, 就算判断出来网络断线,重新连接之后,窗口上的所有dw都没法继续使用啦,还得关闭窗口,重新打开。
banlee 2013-07-19
  • 打赏
  • 举报
回复
谢谢 pb8 的回复
banlee 2013-07-19
  • 打赏
  • 举报
回复
谢谢lzp_lrp的回复
banlee 2013-07-19
  • 打赏
  • 举报
回复
谢谢版主的回复,还想问版主一个问题,第一次连接数据库失败的时候connect需要等待很长时间,起码1分钟时间,请问这个时间能缩短吗?
WorldMobile 2013-07-19
  • 打赏
  • 举报
回复
在timer事件里检测一下,数据库是否连接成功,可以考虑写一个最简单的sql,判断一下sqlca.sqlcode 如果出错,然后重新连接数据库
zhangyangziwo 2013-07-18
  • 打赏
  • 举报
回复
基本上是无解
pb8 2013-07-18
  • 打赏
  • 举报
回复
三、代码改成多层方式;
pb8 2013-07-18
  • 打赏
  • 举报
回复
一、把原来判断数据库执行语言返回值的地方全写成统一判断返回值,如gf_sqlcode,在函数内部根据返回值判断是否连接失效,如果是则重连; 二、在数据窗口的dberror事件中判断,如果是连接失败,则重连再settransobject
banlee 2013-07-18
  • 打赏
  • 举报
回复
有没有其它解决办法呢?

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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