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
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
n_ws_dbservice的內容在哪???uj5u.com熱心網友回復:
這個是你連接資料庫的腳本, 你可以自己寫.
uj5u.com熱心網友回復:
連接庫重新連接后,要設定所有的資料視窗的事務物件uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
難得還有人用pb,而且用的這么好uj5u.com熱心網友回復:
只懂pb, 用習慣了, 就象以前有個前輩說的: pb就象老情人一樣, 打個眼色就知道要怎樣了. 呵呵.
其它的比如 .NET等只懂皮毛, 搞來搞去就象是一個老窮屌絲搞18. 22靚女一樣, 麻煩無法上手.
uj5u.com熱心網友回復:
good
uj5u.com熱心網友回復:
只懂pb, 用習慣了, 就象以前有個前輩說的: pb就象老情人一樣, 打個眼色就知道要怎樣了.uj5u.com熱心網友回復:
怎么用啊,能指點一下嗎?uj5u.com熱心網友回復:
不錯,問題是系統大了,會有各種事務聯接,除了u_dw還有n_ds的所有事務uj5u.com熱心網友回復:
在讀寫資料庫前 of_ReConnectDB() 就可以了.
uj5u.com熱心網友回復:
不錯,在進行資料庫操作之前,進行資料庫連接判斷。
如果斷開,重新連接,再對當前已打開視窗的資料庫物件重新設定SQLCA。
對偶發連接斷開的應用非常有效。就是每次都要判斷是否連接。
uj5u.com熱心網友回復:
ldw_dw.inv_linkage.of_SetTransObject(SQLCA) 這個內容能分享一下么,資料庫是重連上了,但是資料視窗在retrieve的時候總是不行呢uj5u.com熱心網友回復:
你好 這個怎么用的?
uj5u.com熱心網友回復:
這個是pfc的東西.
uj5u.com熱心網友回復:
請問樓主,這段代碼是怎么定義的?iw_frame,iw_frame.inv_sheetManager是從何而來的呢?謝謝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
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
請問樓主,這段代碼是怎么定義的?iw_frame,iw_frame.inv_sheetManager是從何而來的呢?謝謝
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
這個也是pfc的東西.
uj5u.com熱心網友回復:
使用satrda不用這么麻煩,可以自動重連http://blog.csdn.net/pcwe2002/article/details/52615255
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/24731.html
標籤:腳本語言
上一篇:運行PB 出現“停止運行”
