2013-01-20 31 views
3

從Access VBA執行時,以下SP超時。從管理控制檯執行時它工作正常。如果相關,該服務器確實有很高的ping時間:SQL存儲過程在訪問中超時

Dim cnn As ADODB.Connection 
Dim cmd As New ADODB.Command, rs As New ADODB.Recordset, param As New ADODB.Parameter 
Dim fld As ADODB.Field 
Dim stMessage As String 


Set cnn = New ADODB.Connection 
cnn.ConnectionString = "DRIVER=SQL Server;SERVER=server01;DATABASE=db_a;Trusted_Connection=Yes" 

cnn.Open cnn.ConnectionString 

Set cmd = New ADODB.Command 
cmd.ActiveConnection = cnn 
cmd.CommandType = adCmdStoredProc 

    cmd.CommandText = "we_ci_db.stprUpdateValuesInitial_A" 

    Set param = cmd.CreateParameter("@DataSet", adInteger, adParamInput, , stDataSet) 
    cmd.Parameters.Append param 

    rs.CursorType = adOpenStatic 
    rs.CursorLocation = adUseClient 
    rs.LockType = adLockOptimistic 

    Set rs = cmd.Execute 


exit1: 
Set cmd = Nothing 
Set rs = Nothing 
Exit Function 
+0

它更新一個表中的一些領域,一些更新需要從函數中檢索值。 – aSystemOverload

+0

不是線索,這是我發現的第一個代碼。請注意,它會返回有關SP成功的一些基本信息。 – aSystemOverload

回答

3

您可以設置使用ADODB.Command對象CommandTimeout財產超時:

// set a very high number of seconds before timeout 
cmd.CommandTimeout = 9999999 
+0

我第一次誤讀了這個問題,所以我更新了ADO的上述答案 – Anton

+1

我不想爲無窮大的值去尋找,以免弄亂代碼並使服務器死機。我以5秒(秒)開始並繼續前進。 60秒工作正常,所以我把90度作爲好的措施。但是,謝謝你指出我正確的方向。 – aSystemOverload

+0

沒問題!很高興我能幫上忙 :) – Anton