Sql server 如何使用vba中SQL Server的一个过程中的多个记录集

Sql server 如何使用vba中SQL Server的一个过程中的多个记录集,sql-server,vba,tsql,dao,Sql Server,Vba,Tsql,Dao,我已将MS Access前端链接到SQL Server(不知何故,我对这一决定感到遗憾)。现在,我有一系列过程,其中有一个复杂但相似的,其中部分但不同选择不同的,因此我想将它们组合到一个单独的过程中,如 SELECT * FROM myTable1 INNER JOIN @tblFromFunc() SELECT * FROM myTable2 INNER JOIN @tblFromFunc() 以及一个预定义的表值函数@tblFromFunc,它将只处理一次我的WHERE。希望性能更好,维护

我已将MS Access前端链接到SQL Server(不知何故,我对这一决定感到遗憾)。现在,我有一系列过程,其中有一个复杂但相似的
,其中
部分但不同
选择不同的
,因此我想将它们组合到一个单独的过程中,如

SELECT * FROM myTable1 INNER JOIN @tblFromFunc()
SELECT * FROM myTable2 INNER JOIN @tblFromFunc()
以及一个预定义的表值函数
@tblFromFunc
,它将只处理一次我的
WHERE
。希望性能更好,维护更方便

这在SQL Server上运行良好,通过在vba中使用
DAO.QueryDef
DAO.Recordset
,我甚至可以在MS Access中看到这两个独立结果中的第一个(仅尝试了其中的两个)

我找到了
.NextRecordset
的以下描述,简而言之,即vba:

DIM rst作为DAO.Recordset
设置rst=functionConnectServer(“NameOfSp”)
booNext=True
整数=1
用rst
下一步做什么
做而不做
调试.Print、.Fields(0)、.Fields(1)
.下一步
环
booNext=.NextRecordset
intCount=intCount+1
环
以
但是如果我在Acceess 2010中使用它,我得到的响应是,不知何故,
.NextRecordset
不再受支持。所以我不能移动到第二个记录集,老实说,我甚至不确定第二个记录集是否到达我的前端


任何暗示都会让我感到高兴,我甚至对解决这个问题的不同策略持开放态度
'参考Microsoft ActiveX数据对象2.*库
Set conn=新的ADODB.连接
Set rst=New ADODB.Recordset
连接打开“驱动程序={SQL Server};服务器=服务器;数据库=数据库;可信连接=是
rst.打开“EXEC myStoredProc”,康涅狄格州
'第一个记录集
用rst
做而不做
调试.Print、.Fields(0)、.Fields(1)
.下一步
环
以
'第二个记录集
Set rst=rst.NextRecordset()
用rst
做而不做
调试.Print、.Fields(0)、.Fields(1)
.下一步
环
以
rst.Close()
康涅狄格州关闭
设置rst=无
设置连接=无
虽然您可能无法循环许多结果集,但可以将循环放置在已定义的函数中,并在每个
集合之后调用它:

函数检索数据(rs作为记录集)
用rs
做而不做
调试.Print、.Fields(0)、.Fields(1)
.下一步
环
以
端函数
子数据库进程()
...
rst.打开“EXEC myStoredProc”,康涅狄格州
'第一个记录集
呼叫检索数据(rst)
'第二个记录集
Set rst=rst.NextRecordset()
呼叫检索数据(rst)
rst.Close():连接关闭()
设置rst=无:设置conn=无
端接头

实际错误消息是什么?Access显示带有debug.print的完整第一个记录集,在
booNext=.NextRecordset
处停止并高亮显示,并显示运行时错误3251,:不支持此类操作。结束于您没有将rst分配给任何对象。什么是新的rst作为DAO.Recordset?@Parfait:Jep,对不起,你说得对,新的,应该是暗淡的,我刚刚切断了连接到服务器的功能。因此,还有一行类似于
SET rst=functionConnectToServer(“nameOfSpOnServer”)
@Wein.MC,您的答案就在您提供的链接中。您必须确保创建一个
Dim wrkODBC作为工作区
和一个
Dim conPubs作为连接
。然后必须设置
dbUseODBCCursor
。所有这些链接都不是琐碎的,并且是您获取下一组数据所必需的。(如果您正在这样做……那么您需要将代码添加到问题中。加上错误消息也会有帮助。)希望这会有所帮助。