将 Access VBA 中的记录集作为 SQL Server 存储过程用户定义表类型参数传递

问题描述 投票:0回答:2

在 C# 中,您可以将数据表作为用户定义的表类型作为 SQL Server 参数传递。 MS Access VBA 也可以实现这一点吗?我可以将

adodb.recordset
作为这样的存储过程参数传递吗?

我尝试使用以下代码(它已经适用于所有其他数据类型),但是当我尝试传递记录集时出现错误,如果有人可以帮助我编写代码,我将不胜感激。

If ServerConOpen = False Then
    DoCmd.CancelEvent
    Exit Sub
End If
Dim cmd    As New adodb.Command
Dim rs     As New adodb.Recordset
rs.Open "CustData", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
cmd.ActiveConnection = cnx
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "CustDtaInsert"
cmd.Parameters.Append cmd.CreateParameter("@UserDefineTable", adUserDefined, adParamInput, , rs)
cmd.Execute
ServerConClose

我在这一行收到以下错误

cmd.Parameters.Append cmd.CreateParameter("@UserDefineTable", adUserDefined, adParamInput, , rs)

ms-access ms-access-2010 ms-access-2007
2个回答
0
投票

我不确定这是否有效,但您可以尝试用以下内容替换引发错误的行。

set prm = cmd.CreateParameter("@UserDefineTable", adUserDefined, adParamInput, , rs)
cmd.Parameters.Append prm

当然是先声明一下。

Dim prm as ADODB.Parameter


0
投票

VBA 和 SQL Server 不共享任何通用的结构来传递表数据,因此无法直接实现。可以通过将数据写入 Access 中的链接表来完成,但这不是一个优雅的解决方案。

解决这个问题的唯一方法是将数据以文本格式(例如 JSON 或 XML)传递到存储过程,并填充服务器上的表。在之前的 StackOverflow 问题中详细解释了这项技术。

© www.soinside.com 2019 - 2024. All rights reserved.