PB 10.5 OLE 連接SQL2000 ,客戶端斷網后就不能用了,有時輸入的資料量較大,讓用戶重輸意見很大,程式如何能判斷資料庫斷開了,并提示詢問用戶是否重連?或者干脆自動重連資料庫,請指教,謝謝!
uj5u.com熱心網友回復:
你判斷一下sqlca.sqlcode不就行了。uj5u.com熱心網友回復:
怎么判斷啊?代碼寫在哪?總不至于一定時判斷吧?uj5u.com熱心網友回復:
我記得我以前是這樣弄的dw_1.settransobject(sqlca)
改成
dw_1.settrans(sqlca)
就不用考慮連接的問題
試試看~
uj5u.com熱心網友回復:
???有這回事?uj5u.com熱心網友回復:
其實最好的辦法是呼叫windows 的PING不過代碼比較復雜
網上有很多這樣的例子
如果有防火墻的話通不過
/*--------------------------------------------------------------
*檢測服務器是否運行,回傳值說明
-1 作業站沒有安裝SQLDMO
-2 無法得到服務器物件
-3 服務器沒有安裝SQL Server 2000
1 已啟動
2 暫停
3 停止
4 啟動ing
5 停止ing
6 other
*PB進行連接要求:回傳值小于等于1或等于4,嘗試連接
*New By Njz 2006-07-16
*-------------------------------------------------------------*/
String ls_user, ls_password, ls_rtn
Long li_rtn
oleobject ole_server
Return 1
li_rtn = -1
ole_server = Create oleobject
li_rtn = ole_server.ConnectToNewObject("SQLDMO.sqlserver")
If li_rtn <> 0 Then
Return -1
End If
ole_server.Name = as_server
ole_server.logintimeout = 3
If IsNull(ole_server) Then
Return -2
End If
Try
li_rtn = ole_server.Status
Catch(RunTimeError rte)
li_rtn = -3
End Try
Destroy ole_server
Return li_rtn
uj5u.com熱心網友回復:
IF sqlca.sqlcode = 10005 then
connect using sqlca;
End If
uj5u.com熱心網友回復:
dw_1.settrans(sqlca)在檢索或更新資料時會自己連接,當然會對性能有影響
uj5u.com熱心網友回復:
在windows的timer事件中撰寫代碼,判斷斷開樓上已經說了不少辦法了.
如果斷開則自動重鏈.
uj5u.com熱心網友回復:
頂頂!!!uj5u.com熱心網友回復:
腳本應該寫的什么地方?寫在timer中不對吧,難不成還要定時去執行timer事件,很影響效率吧?有沒有專門寫出SQL錯誤地方,SQL一旦出錯就執行該腳本,還是就寫在error事件中然后去判斷錯誤型別?如是寫在error那么應該寫在哪個視窗的error中?MDI?每個視窗都要寫?uj5u.com熱心網友回復:
呼叫winsock的ping服務器功能來判斷是否斷網.腳本執行最好放在按下每個控制鍵之前進行判斷.比如:新建,打開等.如果每次都是長時間的進行輸入單據的話,經常斷網.
可以有兩個方法.一就是在每次itemchanged事件中ping服務器(超笨方法).另外就是,增加一個保存datawindow的內容到檔案的功能,如果在保存時斷網不能保存,就把這些資料保存到電腦上,重新重登后再匯入這些資料繼續錄入即可.
uj5u.com熱心網友回復:
呼叫winsock的ping服務器功能來判斷是否斷網.腳本執行最好放在按下每個控制鍵之前進行判斷.比如:新建,打開等.如果每次都是長時間的進行輸入單據的話,經常斷網.
可以有兩個方法.一就是在每次itemchanged事件中ping服務器(超笨方法).另外就是,增加一個保存datawindow的內容到檔案的功能,如果在保存時斷網不能保存,就把這些資料保存到電腦上,重新重登后再匯入這些資料繼續錄入即可.
uj5u.com熱心網友回復:
ping 也不是最好的辦法,有些機子殺毒軟體就不讓PING,但客戶端照樣能連,PB有沒統一的錯誤事件和錯誤代碼?我的意思就是,一旦程式出錯就會觸發這個事件,只是出錯時觸發,不用像TIMER一樣時不時要執行,然后根據錯誤代碼確定是不是SQL斷開了
uj5u.com熱心網友回復:
5 樓 lonjia8818 這是個函數吧!
但我不清楚你為什么要在代碼開始馬上就執行Return 1,你這樣寫下面的代碼就沒有用處了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/103544.html
標籤:項目管理
