筛选器属性 (ADO)
适用于:Access 2013、Office 2013
指示 Recordset 中数据的筛选条件。
设置和返回值
设置或返回一个 Variant 值,该值可包含以下内容之一:
条件字符串 由一个或多个用 AND 或 OR 运算符连接的子句组成的字符串。
书签数组 指向 Recordset 对象中的记录的唯一书签值数组。
一个 FilterGroupEnum 值。
备注
使用 Filter 属性可以有选择地屏蔽 Recordset 对象中的记录。 经过筛选的 Recordset 成为当前游标。 这将影响基于当前游标返回值的其他属性,如 AbsolutePosition、AbsolutePage、RecordCount 和 PageCount。 因为将 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) 。 将单引号与字符串和井号 (#) 与日期结合使用。 对于数字,可以使用小数点、美元符和科学记数法。 如果 Operator 为 LIKE,则 Value 可以使用通配符。 仅允许使用星号 (*) 和百分号 (%) 通配符,并且必须是字符串中的最后一个字符。 Value 不能为空。
注意
[!注释] 若要在筛选值中包含单引号 ('),则用两个单引号表示一个单引号。 例如,若要筛选 O'Malley,则条件字符串应为 "col1 = 'O''Malley'"。 若要在筛选值的开始和末尾均包含单引号,则使用井号 (#) 包围该字符串。 例如,若要筛选 '1',则条件字符串应为 "col1 = #'1'#"。
AND 和 OR 之间并没有优先级的区别。 可以使用圆括号将子句分组。 但是,不能将由 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 。
|
非键 |
单键 |
多键 |
---|---|---|---|
非键 |
+ |
+ |
+ |
单键 |
+ |
- |
不适用 |
多键 |
+ |
不适用 |
+ |