【问题标题】:VBA - Looping through filtered table in accessVBA - 在访问中循环过滤表
【发布时间】:2015-12-23 13:16:09
【问题描述】:

Access 2013 32 位/Windows 7 64 位

我有一个键表,根据键值,我的 vba 将运行一些查询并填充表中的其他字段 - 我称之为“检查”我在表中有一个“已检查”列并且必须打破将此列表处理为几批(并且不断添加更多记录),因此我想过滤掉“已检查”的记录。我想不使用使用单独的查询来执行此操作

我正在使用带有条件的传统循环: (我的代码有效,这只是一个模拟忽略语法)

Move First
Do Until EOF
if Table("Checked") = "True" Then goto NextRow
    <Code>
NextRow:
    Move Next
Loop

我想继续使用这种方法,但一开始就过滤掉所有"Checked" = True

【问题讨论】:

  • 您是否尝试过使用Checked = "True" 条件创建查询?
  • 我已经考虑过了 - 如果没有过滤选项,我会这样做,但理想情况下我会过滤掉数据
  • RecordSet 确实有 Filter 属性,但我很确定使用带有 WHERE 子句的 sql 语句更有效。
  • 为什么反对使用查询作为记录集的数据源?
  • 我不想在显示未选中项目的查询中对主表运行更新查询以将它们标记为已选中。如果我留在一个表中,过滤表并迭代以创建查询并将它们标记为已检查会更容易。

标签: vba loops ms-access


【解决方案1】:

只需使用具有 WHERE 子句的查询打开您的记录集。

Dim rs As Recordset
Dim S As String

S = "SELECT foo, morefoo FROM bar WHERE [Checked] = 0"
' Or if Checked is a Text column:
S = "SELECT foo, morefoo FROM bar WHERE [Checked] <> 'True'"

Set rs = CurrentDb.OpenRecordset(S)
Do While Not rs.EOF
    ' code

    rs.MoveNext
Loop

(顺便说一句,您在循环中的Move First 会创建一个无限循环...)

【讨论】:

  • 是的,我的错误是先向内移动——我抛出了一个概念。理想情况下,我不想放弃查询——这篇文章正在寻求替代方法——我将清理问题以反映和澄清该目标。谢谢
  • @Schalton:对不起,但这没有多大意义。您必须使用记录集(通过使用 WHERE 子句,请参阅我的答案)或在循环中(请参阅您的问题)过滤记录。没有别的办法。
  • 他可以打开一个 ADO 记录集,然后设置它的Filter 属性。我认为他打算这样做。但我不明白为什么这样做是有意义的。按照您的建议,首先仅加载目标行应该更有效。
  • @Andre,你不理解和没有意义不是一回事。汉斯普谢谢。当我到达标记为选中的行时,我最终对该字段进行了排序,然后退出了子。
【解决方案2】:

当我到达标记为选中的行时,我最终对该字段进行了排序,然后退出了子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多