BuildCriteria 方法返回一個(gè)經(jīng)過語法分析的條件字符串,就像在查詢設(shè)計(jì)網(wǎng)格、在“按窗體篩選”或“按窗體服務(wù)器篩選”模式中顯示的那樣。例如,可能需要基于用戶提供的各種條件設(shè)置窗體的 Filter 或 ServerFilter 屬性??梢允褂?BuildCriteria 方法為 Filter 或 ServerFilter 屬性構(gòu)造字符串表達(dá)式參數(shù)。String 型。
expression.BuildCriteria(Field, FieldType, Expression)
expression 必需。返回“應(yīng)用于”列表中的一個(gè)對象的表達(dá)式。
Field 必需 String 型。字符串表達(dá)式,用于標(biāo)識要為其定義條件的字段。
FieldType 必需 Integer 型。固有常量,指示字段的數(shù)據(jù)類型??梢栽O(shè)置為 DAO DataTypeEnum 值之一。
Expression 必需 String 型。字符串表達(dá)式,標(biāo)識要進(jìn)行語法分析的條件。
BuildCriteria 方法返回一個(gè)字符串。
BuildCriteria 方法能夠很容易地基于用戶的輸入為篩選構(gòu)造條件。此方法分析 expression 參數(shù)的方式,就像將表達(dá)式輸入到查詢設(shè)計(jì)網(wǎng)格、按窗體篩選或按窗體服務(wù)器篩選模式中時(shí)對表達(dá)式進(jìn)行語法分析一樣。
例如,用戶基于“訂單”表創(chuàng)建的查詢可以將結(jié)果集限制在 1995 年 1 月 1 日以后的訂單,方法是對“訂購日期”字段設(shè)置條件。用戶可在“訂購日期”字段下的“條件”行中輸入如下表達(dá)式:
>1-1-95
Microsoft Access 會自動對這個(gè)表達(dá)式進(jìn)行語法分析并返回以下表達(dá)式:
>#1/1/95#
BuildCriteria 方法從 Visual Basic 代碼中提供了相同的語法分析。例如,若要正確返回前面所示的經(jīng)過語法分析的字符串,可以為 BuildCriteria 方法提供如下的參數(shù):
Dim strCriteria As String
strCriteria = BuildCriteria("OrderDate", dbDate, ">1-1-95")
因?yàn)樾枰哉_的、經(jīng)過語法分析的形式為 Filter 屬性提供條件,所以可以使用 BuildCriteria 方法來構(gòu)造語法正確的字符串。
也可以使用 BuildCriteria 方法來構(gòu)造具有多重條件的字符串,只要這些條件引用相同的字段。例如,使用具有以下參數(shù)的 BuildCriteria 方法可以構(gòu)造一個(gè)具有與“訂購日期”字段相關(guān)的多重條件的字符串:
strCriteria = BuildCriteria("OrderDate", dbDate, ">1-1-95 and <5-1-95")
該示例返回如下條件字符串:
訂購日期>#1/1/95# And 訂購日期<#5/1/95#
但是,如果要構(gòu)造一個(gè)引用多個(gè)字段的條件字符串,則必須分別創(chuàng)建各字符串,然后將它們連接起來。例如,要建立篩選條件,以顯示 1995 年 1 月 1 日以后、運(yùn)費(fèi)少于 50 元的訂單記錄,就需要使用兩次 BuildCriteria 方法,并將兩次的結(jié)果字符串連接起來。
下面的示例提示用戶輸入產(chǎn)品名稱的前幾個(gè)字母,然后使用 BuildCriteria 方法構(gòu)造基于用戶輸入的條件字符串。接下來,此過程將該字符串作為參數(shù)提供給“產(chǎn)品”窗體的 Filter 屬性。最后,設(shè)置 FilterOn 屬性以應(yīng)用篩選。
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