【问题标题】:Emptying a DAO recordset or Creating an Empty DAO recordset清空 DAO 记录集或创建空 DAO 记录集
【发布时间】:2018-01-26 22:30:51
【问题描述】:

所以这似乎是一个奇怪的问题。但是,我正在尝试就是否查找记录做一个简单的 If-Else 语句。

第一部分是这样的:

If String Meets Criteria Open Recordset Else Recordset Is Empty End If

我确实对空集进行了大量搜索,到目前为止,我的答案只是创建一个返回空集的快速 SQL 语句。这真的是最简单的方法吗?我永远不会这样设置它,但这是修复某些代码的最快方法,然后:

If recordset.recordCount > 0 Then [Rest of Code]

我还没有找到更明显的东西吗?喜欢:

Set Recordset = 0

【问题讨论】:

  • 请更明确一点。您是要创建一个空记录集,还是要测试一个是否为空?
  • @ErikvonAsmuth 对不起,我在它完成之前发布了这个。现在怎么样?
  • 稍微好一点,但是您实际上想对记录集做什么?您想要一个记录集链接到一个没有任何记录的表,以便您可以添加到它吗?或者你只是想要一个没有链接的空记录集,这几乎没用?
  • @ErikvonAsmuth 创建一个空集也可以。
  • @ErikvonAsmuth 几乎没用的选项。

标签: vba ms-access


【解决方案1】:

如果您想要一个不包含任何记录且不可更新的记录集,您可以使用以下代码:

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT 1 From MSysObjects WHERE FALSE")

DAO 记录集始终打开并链接到数据源。 Dim rs As New DAO.Recordset 之类的东西不起作用(与 ADO 记录集相反,您可以在其中使未打开的记录集变暗)。

如果你只想要一个占位符对象,你也可以Set rs = Nothing,但在这种情况下尝试访问属性或方法时会遇到运行时错误。

【讨论】:

  • 我想按照您的建议执行与仅从返回零结果的小型本地表中打开选择查询之间没有太大的性能差异?还是 MSysObjects 有什么特别之处?
  • MSysObjects 有一些特别之处。它不是实际的表,而是 Access 存储的对象的表示形式,并且不可更新。但是,主要是SELECT 1 -> 不可更新列和WHERE FALSE,比较不需要评估表中的任何字段。 Afaik Access 甚至不检查表格,因为它不需要。
  • 太棒了!感谢您与我讨论手头的问题,我确实为您投票,但我的声誉太低,无法公开显示。
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多