Microsoft Access:执行存储过程并使用DAO返回结果 - 错误

时间:2017-01-18 00:35:36

标签: sql-server vba ms-access stored-procedures

我正在尝试使用VBA在Access 2013中执行存储过程。在具有32位Access 2013的64位Windows 10上(企业标准,不能改变它)。

连接到SQL Server 2008。

不确定为什么这么难,但我无法让它发挥作用!

我有一个名为SQLExec的通用函数:

Public Function SQLExec(SQL as String) As DAO.Recordset
    Dim Rs As DAO.Recordset
    Dim MyDB As DAO.DATABASE

    Debug.Print SQL

    On Error GoTo SQLExecErr

    Set MyDB = CurrentDb
    Set Rs = MyDB.OpenRecordset(SQL, dbOpenSnapshot, dbSQLPassThrough)

    Set SQLExec = Rs

CleanUp:
    Set Rs = Nothing
    Set MyDB = Nothing

Exit Function

SQLExecErr:
    Debug.Print Err.Number, Err.Description
    MsgBox "Error " & Err.Number & " in SQLExec: '" & Err.Description & ".'", vbOKOnly + vbCritical, "Error in SQLExec"

    If IsDeveloper() Then
        Stop
        Resume
    Else
        Resume CleanUp
    End If

End Function

我尝试使用参数传递过程名称,但它总是失败。

sReplaceDevice 'AA000000', 1000, 'AA000000', 'AA000001', 19"

错误:

  

SQLExec中的错误3129:'无效的SQL语句;预期'DELETE','INSERT','PROCEDURE','SELECT'或'UPDATE'..'

我尝试预先EXECUTEPROCEDURE - 结果相同。我尝试将参数ID添加到查询中(例如@ param1 ='test') - 仍然是相同的结果。

有没有人有任何建议?我傻眼了,这应该是那么难。

编辑:此问题已被标记为另一个问题的副本。首先,如果提供了与其他问题的链接,那就太好了。其次,我搜索并搜索了这个问题,并提出了几个解决方案,其中一些来自StackOverflow,没有工作。任何意见都将不胜感激。

1 个答案:

答案 0 :(得分:0)

sReplaceDevice是否返回值?或者只是更新数据?如果它只是执行更新,那么问题可能是您尝试将其作为记录集打开,而您应该只是执行ExecuteNonQuery。像this

一样