在 VBA 中对断开连接的 ADODB 记录集应用过滤器

Posted

技术标签:

【中文标题】在 VBA 中对断开连接的 ADODB 记录集应用过滤器【英文标题】:Applying Filter on a disconnected ADODB Recordset in VBA 【发布时间】:2022-01-08 06:26:12 【问题描述】:

我有一个断开连接记录集,可以通过“CopyFromRecordset”方法将其复制到 Excel 工作表中。 但在此之前,我需要通过 Filter 属性在记录集上设置一个过滤器:

Rst.Filter = "UnitPrice >100" 
Rst.MoveFirst 
Sheet1.Range("A2").CopyFromRecordset Rst    

代码在“Rst.Filter...”行引发了一些自动化错误的运行时错误。 是不是我做错了什么?!或者只是我们不能将过滤器应用于断开连接的记录集??!

【问题讨论】:

对我来说这看起来不错 - 也许在这里再写一点代码会有用。 是的,请您说明您是如何打开记录集的。 打开记录集时查看光标位置并输入。 @Nathan_Sav 记录集在类模块中定义,当对象启动时,记录集创建并打开。 CursorLocation = adUseClient , CursorType = adOpenKeyset , LockType = adLockOptimistic 在打开前设置。没有过滤器一切都很好。 【参考方案1】:

经过大量的测试和搜索,我找到了问题的根源。 这是由于在记录集创建时附加到记录集的字段的数据类型的定义,为了方便,这些字段的类型都是 adVariant = 12。 似乎不再完全支持这种数据类型,并且对于过滤记录集,字段的所有数据类型必须在创建时精确定义并在过滤器字符串中正确使用。请参阅下面的链接: https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/datatypeenum?view=sql-server-ver15

【讨论】:

以上是关于在 VBA 中对断开连接的 ADODB 记录集应用过滤器的主要内容,如果未能解决你的问题,请参考以下文章

VBA ADODB 记录集字段是来自 MySQL 的 Null - 有没有简单的方法来检查或防止“NULL”?

在两个表上分组并在结果VBA ADODB SQL查询上执行左连接

vba adodb参数查询失败

从ADODB记录集复制数据时,Excel表丢失数字格式

Oracle 数据库中的 VBA ADODB DATE 字段类型

将 Access 报表的记录源设置为 ADODB 记录集