筛选器属性 (ADO)

适用于:Access 2013、Office 2013

指示 Recordset 中数据的筛选条件。

设置和返回值

设置或返回一个 Variant 值,该值可包含以下内容之一:

  • 条件字符串 — 由一个或多个用 ANDOR 运算符连接的子句组成的字符串。

  • 书签数组 — 指向 Recordset 对象中的记录的唯一书签值数组。

  • 一个 FilterGroupEnum 值。

备注

使用 Filter 属性可以有选择地屏蔽 Recordset 对象中的记录。 经过筛选的 Recordset 成为当前游标。 这将影响基于当前游标返回值的其他属性,如 AbsolutePositionAbsolutePageRecordCountPageCount。 因为将 Filter 属性设置为特定值将移动当前记录使其成为满足新值的第一条记录。

条件字符串由 FieldName-Operator-Value 格式的子句组成, (例如,“LastName = 'Smith'”) 。 可以通过将单个子句与 AND (连接来创建复合子句,例如“LastName = 'Smith' AND FirstName = 'John'”) 或 OR (例如“) ”。 可以通过将单个子句与 AND ((例如,“LastName = 'Smith' AND FirstName = 'John'”) 或 OR (例如,“LastName = 'Smith' OR LastName = 'Jones'”) )串联来创建复合子句。 条件字符串的使用准则如下:

  • FieldName 必须是 Recordset 中的有效字段名。 如果字段名中包含空格,则必须用方括号将字段名括起来。

  • 运算符 必须为下列值之一: <、、 >= <、 >=、 <>、=或 LIKE

  • Value 是用于比较字段值的值, (例如,“Smith”、#8/24/95#、12.345 或 $50.00) 。 将单引号与字符串和井号 (#) 与日期结合使用。 对于数字,可以使用小数点、美元符和科学记数法。 如果 OperatorLIKE,则 Value 可以使用通配符。 仅允许使用星号 (*) 和百分号 (%) 通配符,并且必须是字符串中的最后一个字符。 Value 不能为空。

    注意

    [!注释] 若要在筛选值中包含单引号 ('),则用两个单引号表示一个单引号。 例如,若要筛选 O'Malley,则条件字符串应为 "col1 = 'O''Malley'"。 若要在筛选值的开始和末尾均包含单引号,则使用井号 (#) 包围该字符串。 例如,若要筛选 '1',则条件字符串应为 "col1 = #'1'#"。

  • ANDOR 之间并没有优先级的区别。 可以使用圆括号将子句分组。 但是,不能将由 OR 联接的子句分组,然后使用 AND 将组加入另一个子句,如以下代码片段所示:
    (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

  • 可以按如下方法构造此筛选条件
    (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')

  • LIKE 子句中,可以在模式的开头和末尾使用通配符 (例如 LastName Like '*mit*') ,或者仅在模式的末尾使用通配符 (,例如 LastName Like 'Smit*') 。

通过仅允许查看,例如仅允许查看上次调用 UpdateBatch 方法的过程中涉及到的记录,筛选常量更便于解决批更新模式中的各个记录冲突。

如果与基础数据冲突(例如,其他用户已经删除该记录),则不能成功设置 Filter 属性本身。 此时,提供程序将向 Errors 集合返回警告,但不会中断程序执行。 只有所有请求的记录均存在冲突时才会产生运行时错误。 使用 Status 属性可定位发生冲突的记录。

Filter 属性设置为零长度字符串 ("") 与使用 adFilterNone 常量具有相同效果。

一旦设置了 Filter 属性,当前记录位置就会移至 Recordset 中已筛选记录子集的首条记录。 同样,如果清除 Filter 属性,则当前记录位置将移至 Recordset 中的首条记录。

有关可与 Filter 属性一起用来生成数组的书签值的说明,请参阅 Bookmark 属性。

只有条件字符串形式的 筛选器 (例如 OrderDate > '12/31/1999') 影响持久 记录集的内容。 通过 Bookmark 数组或使用 FilterGroupEnum 中的值创建的 Filter 不会影响持久 Recordset 的内容。 这些规则适用于通过客户端或服务器端游标创建的 Recordset

注意

[!注释] 在批更新模式下,将 adFilterPendingRecords 标记应用于筛选和修改的 Recordset 时,如果筛选是基于单键表的键字段并且对该键字段值进行修改,则得到的 Recordset 将为空。 如果满足以下条件之一,得到的 Recordset 就不为空:

  • 基于单键表中的非键字段的筛选。
  • 基于多键表中的任何字段的筛选。
  • 对单键表中的非键字段进行修改。
  • 对多键表中的任何字段进行修改。

下表总结了在不同的筛选和修改方式组合下 adFilterPendingRecords 所产生的效果。 左边的列显示的是可能的修改方式:可对任何非键字段、单键表中的键字段、或多键表中的任何键字段进行修改。 最上面的行显示的是筛选条件:可以根据任何非键字段、单键表中的键字段、或多键表中的任何键字段进行筛选。 交叉单元显示的是结果:+ 表示使用 adFilterPendingRecords 产生非空 Recordset- 表示空 Recordset


非键

单键

多键

非键

+

+

+

单键

+

-

不适用

多键

+

不适用

+