用两个函数基本上解决此世纪难题——PB实现网络重新恢复后,系统自动重新连接数据库

//====================================================================
// 函数: 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

原文链接:https://bbs.csdn.net/topics/391836933

猜你喜欢

转载自blog.csdn.net/qq_37545120/article/details/84941453