2017-09-11 113 views
0

我在MS Access中的代碼的語法看起來是正確的。SQL Server存儲過程似乎不叫

我可以在SQL中手動運行存儲過程並獲得正確的結果。

當我嘗試使用ADO從MS Access調用存儲過程時,似乎沒有任何事情發生;任何幫助將不勝感激。

Private Sub Combo13_LostFocus() 

Dim P1 As Integer 

P1 = Forms![Frm_Ws10a]![Frm_WS10b]![Combo13].Column(0) 

Dim rs As ADODB.Recordset 
Dim CN As ADODB.Connection 
Dim cmd As ADODB.Command 
Dim prm As ADODB.Parameter 

Dim adstring As Variant 

Set CN = New ADODB.Connection 

CN.ConnectionString = "Driver=SQL 
Server;Server=LDXFBHD013492 \SQLEXPRESS;Database=xxxx;Trusted_Connection=YES;" 
CN.Open 

Set cmd = New ADODB.Command 
With cmd 
    .ActiveConnection = CN 
    .CommandText = "dbo.usp_update_consequenceweighting" 
    .CommandType = adCmdStoredProc 
    .Parameters.Refresh 
    Set prm = .CreateParameter("@ITID", adInteger, adParamInput) 
    prm.Value = P1 

End With 

Set rs = cmd.Execute 

Me.Recalc 
Me.Refresh 

在此先感謝

+0

'parameters.refresh'標識併爲你創建參數。您通常不需要調用'CreateParameter'來手動添加它們。我會使用調試模式來檢查代碼中的參數,看看它是否是期望的。然後我會直接在SSMS中查詢SQL表。然後,我會使用SQL Profiler來捕獲SP調用,並查看是否有任何意外。如果沒有錯誤報告,那麼我的猜測是,您沒有傳入您期望的參數值,並且數據沒有像您期望的那樣發生變化。 –

+0

你有proc代碼中的SET NOCOUNT ON嗎?如果沒有,請添加它。 –

+0

我已經添加到設置nocount到存儲過程中,但仍然無法獲得調用該過程的代碼。如果我刪除參數.refresh,我得到一個錯誤,說「存儲過程xxx - 預計變量@ITID」。請指導 –

回答

0

你缺少以下

With cmd 
.ActiveConnection = CN 
.CommandText = "dbo.usp_update_consequenceweighting" 
.CommandType = adCmdStoredProc 
.Parameters.Refresh 
Set prm = .CreateParameter("@ITID", adInteger, adParamInput) 

嘗試在代碼中.parameters.append加入parameter.append,而不是通常將它設置

With cmd 
.ActiveConnection = CN 
.CommandText = "dbo.usp_update_consequenceweighting" 
.CommandType = adCmdStoredProc 
.parameter.append .createparameter("@ITID", adInteger, adParamInput, 50, [Value or variable here]) 
.execute 1 
End With