1. 程式人生 > >用兩個函式基本上解決此世紀難題——PB實現網路重新恢復後,系統自動重新連線資料庫

用兩個函式基本上解決此世紀難題——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