BuildCriteria 方法返回一个经过语法分析的条件字符串,就像在查询设计网格、在“按窗体筛选”或“按窗体服务器筛选”模式中显示的那样。例如,可能需要基于用户提供的各种条件设置窗体的 Filter 或 ServerFilter 属性。可以使用 BuildCriteria 方法为 Filter 或 ServerFilter 属性构造字符串表达式参数。String 型。
expression.BuildCriteria(Field, FieldType, Expression)
expression 必需。返回“应用于”列表中的一个对象的表达式。
Field 必需 String 型。字符串表达式,用于标识要为其定义条件的字段。
FieldType 必需 Integer 型。固有常量,指示字段的数据类型。可以设置为 DAO DataTypeEnum 值之一。
Expression 必需 String 型。字符串表达式,标识要进行语法分析的条件。
BuildCriteria 方法返回一个字符串。
BuildCriteria 方法能够很容易地基于用户的输入为筛选构造条件。此方法分析 expression 参数的方式,就像将表达式输入到查询设计网格、按窗体筛选或按窗体服务器筛选模式中时对表达式进行语法分析一样。
例如,用户基于“订单”表创建的查询可以将结果集限制在 1995 年 1 月 1 日以后的订单,方法是对“订购日期”字段设置条件。用户可在“订购日期”字段下的“条件”行中输入如下表达式:
>1-1-95
Microsoft Access 会自动对这个表达式进行语法分析并返回以下表达式:
>#1/1/95#
BuildCriteria 方法从 Visual Basic 代码中提供了相同的语法分析。例如,若要正确返回前面所示的经过语法分析的字符串,可以为 BuildCriteria 方法提供如下的参数:
Dim strCriteria As String
strCriteria = BuildCriteria("OrderDate", dbDate, ">1-1-95")
因为需要以正确的、经过语法分析的形式为 Filter 属性提供条件,所以可以使用 BuildCriteria 方法来构造语法正确的字符串。
也可以使用 BuildCriteria 方法来构造具有多重条件的字符串,只要这些条件引用相同的字段。例如,使用具有以下参数的 BuildCriteria 方法可以构造一个具有与“订购日期”字段相关的多重条件的字符串:
strCriteria = BuildCriteria("OrderDate", dbDate, ">1-1-95 and <5-1-95")
该示例返回如下条件字符串:
订购日期>#1/1/95# And 订购日期<#5/1/95#
但是,如果要构造一个引用多个字段的条件字符串,则必须分别创建各字符串,然后将它们连接起来。例如,要建立筛选条件,以显示 1995 年 1 月 1 日以后、运费少于 50 元的订单记录,就需要使用两次 BuildCriteria 方法,并将两次的结果字符串连接起来。
下面的示例提示用户输入产品名称的前几个字母,然后使用 BuildCriteria 方法构造基于用户输入的条件字符串。接下来,此过程将该字符串作为参数提供给“产品”窗体的 Filter 属性。最后,设置 FilterOn 属性以应用筛选。
Sub SetFilter()
Dim frm As Form, strMsg As String
Dim strInput As String, strFilter As String
' Open Products form in Form view.
DoCmd.OpenForm "Products"
' Return Form object variable pointing to Products form.
Set frm = Forms!Products
strMsg = "Enter one or more letters of product name " _
& "followed by an asterisk."
' Prompt user for input.
strInput = InputBox(strMsg)
' Build criteria string.
strFilter = BuildCriteria("ProductName", dbText, strInput)
' Set Filter property to apply filter.
frm.Filter = strFilter
' Set FilterOn property; form now shows filtered records.
frm.FilterOn = True
End Sub