-1

我是 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。

现在我的问题是如何在访问中获取这个值,以便我可以向用户显示状态。

4

2 回答 2

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

于 2013-07-16T14:39:18.067 回答
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
于 2013-07-23T13:18:59.327 回答