Excel VBA 在Access中使用ADO命令对象调用存储查询

Excel VBA Use ADO Command Object to Call Stored Query in Access

我正在尝试调用我的 Access 数据库中存储的查询,该查询需要一个参数(标准)。 当我尝试这样做时,当它到达行 cmd(1)=userName.

时,出现运行时错误“3265”:“在与请求的名称或序号对应的集合中找不到项目”

上面的 msgbox 行显示参数计数为 0,但应该是 1。

Function getUserLevelCmd() As String
 Dim conn As ADODB.Connection
 Dim rs As ADODB.Recordset
 Dim cmd As New ADODB.Command

 Set conn = makeConnection()

 cmd.CommandText = "accessLevelByUN"
 cmd.CommandType = adCmdStoredProc

 cmd.ActiveConnection = conn

 cmd.Parameters.Refresh

 MsgBox (cmd.Parameters.Count)

 cmd(1) = userName

 Set rs = cmd.Execute

 rs.Close
 conn.Close
 Set cmd = Nothing
End Function

我对所有的拼写检查了两次和三次。我知道与我的数据库的连接很好,因为我可以使用它来执行其他 SQL 查询。它只是存储的查询,其中包含我坚持使用的参数。 我的尝试基于 Microsoft 的本教程: https://docs.microsoft.com/en-us/sql/ado/guide/data/calling-a-stored-procedure-with-a-command?view=sql-server-ver15

这是这个简单查询在 Access 中的设计视图(参数以红色圈出):

Access中查询的SQL视图:

有人有什么建议吗?

adCmdStoredProc 似乎不是为 MsAccess 查询设计的。将其更改为 adCmdTable。此外,在设置参数值时,它们从零开始索引。

 Dim conn As ADODB.Connection
 Dim rs As ADODB.Recordset
 Dim cmd As New ADODB.Command

 Set conn = makeConnection()
 cmd.CommandText = "accessLevelByUN"
 cmd.CommandType = adCmdTable

 cmd.ActiveConnection = conn

 cmd.Parameters.Refresh

 MsgBox (cmd.Parameters.Count)

 cmd.Parameters(0) = userName

 Set rs = cmd.Execute
...