2015-12-23 74 views
0

我試圖修復一些小工具,它似乎在空閒時間後失去與數據庫的連接。我已經將超時設置爲0,但這似乎不起作用。VB6 ADODB.Connection執行()重試,直到成功

而不是簡單地崩潰並顯示一些錯誤消息我想嘗試重新建立連接並執行查詢,直到成功(我意識到這可能是一個不好的資源使用),但即使這樣,我就是這樣試圖在這裏完成。或者,如果可能的話,顯示一個消息框,指出連接已經丟失,然後一旦連接建立就關閉連接。

任何建議將不勝感激。

Public connMain As ADODB.Connection 
Public rsMain As ADODB.Recordset 

...... 

Function Picture_Exists() As Boolean 
On Error Resume Next 
sqlstr = "select * .... " 
Set rsMain = connMain.Execute(sqlstr) 
+0

一些故障(或許是大多數)永遠不能成功所以這將是一個無限循環。 – Plutonix

+0

請在您的問題的代碼部分提及整個SQL查詢。 –

回答

0

由於未使用,您的連接可能會被丟棄在數據庫端。在不使用連接時維持連接並不是好習慣;資源方面的連接費用很高,因此任何這種做法都不能很好地擴展。 Dbadmins不可能將未使用的連接保留很長時間。

您的潛在解決方案說,嘗試連接,如果你不能忽略錯誤。我們並不經常在這個業務中說「從不」,但是您不應該使用「On Error Resume Next」而不評估Err.Number來查看它是否等於0(如果是,則不會有錯誤)。這被稱爲「內聯錯誤處理」。

在任何情況下,我都不會使用這種方法。我會評估Connection對象的State Property,如果它關閉(cn.State = adoStateClosed),那麼我會重新打開它。

0

你可以嘗試以下方法:

On Error Resume ''''instead of On Error Resume Next 

Dim rsMain As New ADODB.Recordset 
sqlstr = "select * .... " 
If rsMain.State = adStateOpen Then rsMain.Close 
rsMain.Open sqlstr, sProvider, adOpenKeyset, adLockOptimistic