Sql server Microsoft Access:执行存储过程并使用DAO返回结果-错误
我正在尝试使用VBA在Access 2013中执行存储过程。在64位Windows 10上使用32位Access 2013(公司标准,无法更改) 正在连接到SQL Server 2008 不知道为什么这么难,但我就是做不到 我有一个名为SQLExec的通用函数:Sql server Microsoft Access:执行存储过程并使用DAO返回结果-错误,sql-server,vba,ms-access,stored-procedures,Sql Server,Vba,Ms Access,Stored Procedures,我正在尝试使用VBA在Access 2013中执行存储过程。在64位Windows 10上使用32位Access 2013(公司标准,无法更改) 正在连接到SQL Server 2008 不知道为什么这么难,但我就是做不到 我有一个名为SQLExec的通用函数: Public Function SQLExec(SQL as String) As DAO.Recordset Dim Rs As DAO.Recordset Dim MyDB As DAO.DATABASE
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语句;应为“删除”、“插入”、“过程”、“选择”或“更新”…'
我尝试了预编执行
和过程
——结果相同。我尝试将参数ID添加到查询中(@param1='test',例如。)-结果仍然相同
有人有什么建议吗?我真是目瞪口呆,竟然这么难
编辑:此问题已标记为另一个问题的副本。首先,如果能提供与其他问题的链接就好了。其次,我在这个问题上搜索了又搜索,找到了几个解决方案,有些来自StackOverflow,但都不起作用。任何输入都将不胜感激。替换设备是否返回值?还是仅仅更新数据?如果它只是执行更新,那么问题可能是您试图将其作为记录集打开,而您应该只执行ExecuteOnQuery。与类似,sReplaceDevice是否返回值?还是仅仅更新数据?如果它只是执行更新,那么问题可能是您试图将其作为记录集打开,而您应该只执行ExecuteOnQuery。比如复制品在哪里?我搜索了Stack Overflow并找到了其他类似的问题,但这些解决方案也不起作用。问题顶部的“duplicate”横幅包含。请注意,您不能执行
Set Rs=CurrentDb.OpenRecordset(SQL、dbOpenSnapshot、DBSQLSpassthrough)
-ODBC连接字符串从何而来?您需要一个直通查询。副本在哪里?我搜索了Stack Overflow并找到了其他类似的问题,但这些解决方案也不起作用。问题顶部的“duplicate”横幅包含。请注意,您不能执行Set Rs=CurrentDb.OpenRecordset(SQL、dbOpenSnapshot、DBSQLSpassthrough)
-ODBC连接字符串从何而来?您需要一个PassThrough查询。sReplaceDevice执行更新并返回一个值。这个过程是有效的,我正在组装的SQL是正确的,但它仍然在Access中抛出错误。然后我尝试执行一个单独的查询来获取新创建的记录的ID。因为我在查询一个带有标识列的表,所以它告诉我必须使用“dbSeeChanges”,即使我是。最后,我的解决方案是使用带有MAX aggregate函数的查询,以获取在相关表中创建的新记录的ID。此时,它停止抱怨标识列,并返回我想要的值。DUH。我错过了上面重复问题的链接。My抱歉.sReplaceDevice执行更新并返回值。这个过程是有效的,我正在组装的SQL是正确的,但它仍然在Access中抛出错误。然后我尝试执行一个单独的查询来获取新创建的记录的ID。因为我在查询一个带有标识列的表,所以它告诉我必须使用“dbSeeChanges”,即使我是。最后,我的解决方案是使用带有MAX aggregate函数的查询,以获取在相关表中创建的新记录的ID。此时,它停止抱怨标识列,并返回我想要的值。DUH。我错过了上面重复问题的链接。我道歉。