指示 记录集中的数据筛选器。
设置和返回值
设置或返回一个 Variant 值,该值可以包含以下项之一:
条件字符串: 由与 AND 或 OR 运算符串联的一个或多个单独子句组成的字符串。
书签数组: 指向 记录集 对象中记录的唯一书签值的数组。
言论
使用 Filter 属性有选择地筛选出 Recordset 对象中的记录。 筛选 记录集 将成为当前游标。 返回基于当前 游标 的值的其他属性会受到影响,例如 AbsolutePosition 属性(ADO)、AbsolutePage 属性(ADO)、RecordCount 属性(ADO)和 PageCount 属性(ADO)。 将 Filter 属性设置为特定的新值会将当前记录移动到满足新值的第一条记录。
条件字符串由 fieldName-Operator-Value 形式的子句组成(例如,"LastName = 'Smith'"
)。 可以通过将单个子句与 AND(例如,"LastName = 'Smith' AND FirstName = 'John'"
)或 OR(例如,"LastName = 'Smith' OR LastName = 'Jones'"
)连接在一起来创建复合子句。 对于条件字符串,请使用以下准则:
FieldName 必须是来自 Recordset的有效字段名称。 如果字段名称包含空格,则必须将名称括在方括号中。
运算符必须是下列项之一:<、>、<=、>=、<>、=或 LIKE。
值是用于比较字段值的值(例如,“Smith”、#8/24/95#、12.345 或 $50.00)。 将单引号与字符串和磅号(#)与日期一起使用。 对于数字,可以使用小数点、美元符号和科学表示法。 如果运算符 LIKE,则值可以使用通配符。 只允许星号和百分比符号(%)通配符,并且它们必须是字符串中的最后一个字符。 值不能为 null。
注意
若要在筛选器值中包含单引号('),请使用两个单引号来表示一个引号。 例如,若要筛选 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*'
。 或者,如果 LIKE,则只能在模式末尾使用通配符。 例如,LastName Like 'Smit*'
。
筛选器常量使在批处理更新模式下更轻松地解决单个记录冲突,例如,仅查看在上次 UpdateBatch 方法 方法调用期间受影响的记录。
设置 Filter 属性本身可能会因与基础数据冲突而失败。 例如,当记录已被其他用户删除时,可能会发生此失败。 在这种情况下,提供程序向 Errors 集合(ADO) 集合返回警告,但不会停止程序执行。 仅当所有请求的记录发生冲突时,运行时才会发生错误。 使用 Status 属性 (ADO Recordset) 属性查找有冲突的记录。
将 Filter 属性设置为零长度字符串 (“”) 的效果与使用 adFilterNone 常量的效果相同。
每当设置 Filter 属性时,当前记录位置将移动到 Recordset中筛选的记录子集中的第一条记录。 同样,当清除 Filter 属性时,当前记录位置将移动到 Recordset中的第一条记录。
假设 记录集 根据某些变体类型的字段进行筛选,例如类型sql_variant。 条件字符串中使用的字段和筛选值的子类型不匹配时,将发生错误(DISP_E_TYPEMISMATCH或80020005)。 例如,假设:
- Recordset 对象(rs)包含sql_variant类型的列(C)。
- 此列的字段已分配 I4 类型的值 1。 条件字符串设置为字段上的
rs.Filter = "C='A'"
。
此配置在运行时生成错误。 但是,应用于同一字段的 rs.Filter = "C=2"
不会产生任何错误。 字段被筛选出当前记录集。
有关书签值的说明,请参阅 Bookmark 属性(ADO) 属性,以便从中生成要与 Filter 属性一起使用的数组。
只有条件字符串形式的筛选器会影响持久化 记录集的内容。 条件字符串的示例是 OrderDate > '12/31/1999'
。 使用书签数组创建的筛选器,或使用来自 FilterGroupEnum的值,不会影响持久化 Recordset的内容。 这些规则适用于使用客户端或服务器端游标创建的记录集。
注意
在批处理更新模式下将 adFilterPendingRecords 标志应用于筛选和修改的 Recordset 时,如果筛选基于单键表的键字段,并且对键字段值进行了修改,则结果 Recordset 为空。 如果下列语句之一为 true,则结果 Recordset 将为非空:
筛选基于单键表中的非键字段。
筛选基于多键表中的任何字段。
对单键表中的非键字段进行了修改。
对多键表中的任何字段进行了修改。
下表汇总了 adFilterPendingRecords 筛选和修改的不同组合的效果。 左列显示可能的修改。 可以在任何非键式字段、单键表中的键字段或多键表的任何键字段上进行修改。 顶部行显示筛选条件。 筛选可以基于任何非键化字段、单键表中的键字段或多键表中的任何键字段。 相交单元格显示结果。 + 加号意味着 应用 adFilterPendingRecords 会导致非空 Recordset。 - 减号表示空 Recordset。
组合 | 非键 | 单个键 | 多个密钥 |
---|---|---|---|
非密钥 | + | + | + |
单键 | + | - | 无 |
多个密钥 | + | 无 | + |
适用于
另请参阅
Filter 和 RecordCount 属性示例 (VB)Filter 和 RecordCount 属性示例 (VC++)Clear 方法 (ADO)Optimize Property-Dynamic (ADO)