-1

我是Access中的新成員,並且卡在記錄集中。我正在使用正確的連接字符串從Access運行一個過程。該程序運行得非常好。需要從SQL記錄集中的SQL過程中獲取返回的值

Set con = New ADODB.connection 
Set rs = New ADODB.Recordset 
con.Open "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"    // Connection string. 
rs.Open "Exec [stored procedure] 'parameter' ", con, adOpenDynamic, adLockOptimistic 

SQL中的這個存儲過程基於失敗和成功(它告訴過程的狀態)返回兩個值0和1。

現在我的問題是如何獲取訪問這個值,以便我可以顯示用戶的狀態。

回答

1

聽起來好像你的存儲過程實際上只返回一個值,它可能是0或1。這通常被稱爲標量值(單個值而不是一組值或集合)。

它也看起來像你需要傳遞參數到你的存儲過程。這通常被稱爲參數化查詢。正如您可能知道的那樣,可以編寫不使用參數的存儲過程。

Set con = New ADODB.connection 
Set rs = New ADODB.Recordset 
rs.CursorType = adOpenForwardOnly 
rs.LockType = adLockReadOnly 
con.Open "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" '// Connection string. 

Dim cmd as New ADODb.Command 
cmd.CommandTimeout = 5 
cmd.ActiveConnection = con 
cmd.CommandText = "SQL GOES HERE" 
cmd.CommandType = acCmdStoredProc 

Dim param 
Set param = cmd.CreateParameter("@productid", adInteger, adParamInput, 0, 0) 
cmd.Parameters.Append param 
cmd.Parameters("@productid") = 15 'Return the product with ProductID = 15 

Set rs = cmd.Execute 
'or use: 
'rs.Open cmd 
Debug.Print rs(0) 

rs.close 
Set rs = Nothing 
Set cmd = Nothing 
con.close 
Set con = Nothing 

微軟對這個的文章。它使用VBScript編寫,但可以輕鬆適應VBA。 http://support.microsoft.com/kb/200190

您也可以看看這個對SO:
How to access SQL Server scalar functions in MS Access VB

0

當調用存儲過程,第一個參數是返回值。

' Set up a return parameter. 
Set prm = .CreateParameter("Return", adInteger, adParamReturnValue) 
.Parameters.Append prm 
' Set up an input parameter. 
Set prm = .CreateParameter("Id", adInteger, adParamInput, , lid) 
.Parameters.Append prm 
' Set up an output parameter. 
Set prm = .CreateParameter("Output", adInteger, adParamOutput) 
.Parameters.Append prm 

' Execute command, and loop through recordset, printing out rows. 
.Execute , , adExecuteNoRecords 
If .Parameters("Return") = 0 Then 
    lid = Nz(.Parameters("Output").Value, 0) 
    If lid <> 0 Then AdoSingleId = True 
Else 
    lid = .Parameters("Return") 
End If