用兩個函式基本上解決此世紀難題——PB實現網路重新恢復後,系統自動重新連線資料庫
阿新 • • 發佈:2019-01-10
//==================================================================== // 函式: 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