我是Access的新手,我被困在记录集中。我正在使用正确的连接字符串从Access运行过程。程序运行得非常好。
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(它告诉过程的状态)。
现在我的问题是如何在访问中获取此值,以便我可以向用户显示状态。
答案 0 :(得分: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
答案 1 :(得分: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