我正在尝试使用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'..'
我尝试预先EXECUTE
和PROCEDURE
- 结果相同。我尝试将参数ID添加到查询中(例如@ param1 ='test') - 仍然是相同的结果。
有没有人有任何建议?我傻眼了,这应该是那么难。
编辑:此问题已被标记为另一个问题的副本。首先,如果提供了与其他问题的链接,那就太好了。其次,我搜索并搜索了这个问题,并提出了几个解决方案,其中一些来自StackOverflow,没有工作。任何意见都将不胜感激。
答案 0 :(得分:0)
sReplaceDevice是否返回值?或者只是更新数据?如果它只是执行更新,那么问题可能是您尝试将其作为记录集打开,而您应该只是执行ExecuteNonQuery。像this
一样