系統背景:使用MS-Access 2010在VBA中進行編碼。當前正在處理模塊後面的代碼並調用存儲過程。存儲過程用SQL編寫,並在存儲數據庫的Ms-SQL服務器2008應用程序上運行。存儲過程的輸出參數僅返回零
存儲過程:存儲過程的目的是:
- 檢索三個輸入參數:WOID,SampleID和分析物
- 加入兩個表:tblWoSampleTest,TBLTEST
- 選擇testID其中三個值匹配
說明: WOID和SampleID colu MN在tblWoSampleTest和分析物是TBLTEST
一旦存儲過程被調用時,testId被保存到一個局部變量ThisTestID
CREATE PROCEDURE upGetTestIDForAnalyte @WOID nvarchar(60), @SampleID nvarchar(60),@Analyte nvarchar(60), @TestId int OUT
AS
SELECT @TestID = (Select TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte)
GO
我的問題是我每次調用存儲過程時,該值ThistestId之前被初始化爲返回,即使我知道測試ID存在,並且存儲過程似乎正常運行。爲了驗證它的存在我把我的存儲過程,簡單地跑:
Select TestID = t1.TestID
FROM tblWOSampleTest t1
JOIN tblTest t2
ON t1.TestID=t2.TestID
WHERE @WOID = t1.WOID AND @SampleID = t1.SampleID AND @Analyte = t2.Analyte
,並有正確的testId返回(會有永遠只能是一個值)。我不認爲數據類型有問題,因爲testid是一個數字而不是字符串。這也是我稱之爲的方式,雖然我很確定這種方法是正確的。
ThisTestId = 5
Set Conn = New ADODB.connection
Conn.ConnectionString = "connection string"
Conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = Conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "upGetTestIDForAnalyte"
cmd.Parameters.Append cmd.CreateParameter("@Analyte", adVarChar, adParamInput, 60, Analyte)
cmd.Parameters.Append cmd.CreateParameter("@WOID", adVarChar, adParamInput, 60, ThisWOID)
cmd.Parameters.Append cmd.CreateParameter("@SampleID", adVarChar, adParamInput, 60, 1)
cmd.Parameters.Append cmd.CreateParameter("@testid", adDouble, adParamOutput, , ThisTestID)
cmd.Execute
Conn.Close
msgbox ThisTestId
在這種情況下,5將打印
是這樣的事嗎?在我保留行_cmd.parameters ... _ 'cmd.Parameters.Append cmd.CreateParameter(「@ testid」,adDouble,adParamOutput,ThisTestID)' 'cmd.Execute' 'Conn.Close ' 'ThisTestID = cmd.Parameters(「@ testid」)。價值' – VictoriaJay
是的。執行該過程後,您需要讀取參數值。你得到了什麼 ? – NicoD
我在'ThisTestID = cmd.Parameters(「@ testid」)行得到一個錯誤無效的使用null值 – VictoriaJay