Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Microsoft Access:执行存储过程并使用DAO返回结果-错误_Sql Server_Vba_Ms Access_Stored Procedures - Fatal编程技术网

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

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

我正在尝试使用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

    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。我错过了上面重复问题的链接。我道歉。