在本章中,我們將使用內(nèi)置函數(shù)。在Access中,有近一百個內(nèi)置函數(shù),幾乎不可能覆蓋它們中的每一個。在本章中,我們將介紹基本結(jié)構(gòu),語法,使用一些更流行的函數(shù),以及缺陷,以便您可以自己去探索一些其他功能。
函數(shù)是執(zhí)行任務(wù)或計算并返回結(jié)果的VBA過程。函數(shù)通常可以在查詢中使用,但也有其他地方可以使用函數(shù)。
您可以使用表格屬性中的函數(shù),例如,如果要為日期/時間字段指定默認(rèn)值,您可以使用日期或Now函數(shù)從系統(tǒng)調(diào)用當(dāng)前日期/時間信息,并自動輸入該值。
您還可以在創(chuàng)建計算字段時使用表達式中的函數(shù),或者使用窗體或報表控件中的函數(shù)。即使在宏參數(shù)中也可以使用函數(shù)。
函數(shù)可以很簡單,不需要調(diào)用其他信息,或者只需引用表或查詢中的一個字段。
另一方面,它們也可以變得相當(dāng)復(fù)雜,有多個參數(shù),字段引用,甚至嵌套在另一個函數(shù)內(nèi)的其他函數(shù)。
讓我們來看看使用內(nèi)置函數(shù)的一些例子。
現(xiàn)在讓我們了解日期和時間函數(shù) -
Date()函數(shù)旨在返回當(dāng)前系統(tǒng)日期。此函數(shù)不需要任何函數(shù)參數(shù)或附加信息。所有你需要做的是寫函數(shù)的名稱和那些打開和關(guān)閉括號。
有兩個非常相似的內(nèi)置函數(shù)Time()和Now()。
Time()函數(shù)僅返回當(dāng)前系統(tǒng)時間,Now()函數(shù)返回當(dāng)前系統(tǒng)日期和時間。
根據(jù)您要跟蹤,存儲或查詢的數(shù)據(jù),您有三個內(nèi)置的,易于使用的功能來幫助執(zhí)行該任務(wù)。
讓我們現(xiàn)在打開你的數(shù)據(jù)庫,并使用查詢設(shè)計創(chuàng)建一個新查詢,并添加tblProjects和tblTask??s。
從tblProjects中添加ProjectName,從tblTask??s中添加TaskTitle,StartDate和DueDate,然后運行查詢。
您現(xiàn)在可以看到所有項目的所有不同任務(wù)。如果要查看當(dāng)前進行中的項目任務(wù),那么我們必須使用Date()函數(shù)來指定一個條件,以查看在當(dāng)天日期或之后開始的項目。
現(xiàn)在讓我們指定StartDate下面的條件。
標(biāo)準(zhǔn)以大于符號的運算符開頭,后跟等于符號,然后是日期函數(shù)。
當(dāng)我們運行此查詢時,所有任務(wù)將在今天或?qū)戆l(fā)生,如以下屏幕截圖所示。
這是一個如何使用Date()函數(shù)作為查詢條件的示例。
比如,這個查詢需要在本周開始的日期更靈活。
我們有幾個不同的任務(wù),本周開始,沒有顯示在這個當(dāng)前列表,因為我們的標(biāo)準(zhǔn)。它看起來等于今天或以上的開始日期。
如果我們想要查看本周開始的任務(wù),那些任務(wù)尚未完成或今天應(yīng)該完成,那么讓我們回到設(shè)計視圖。
在這里,我們將為這些標(biāo)準(zhǔn)添加一些額外的信息。事實上,我們希望它大于或等于今天的日期減去7天。
如果我們輸入減7并運行查詢,您可以看到本周開始的任務(wù)。
DateDiff()函數(shù)是另一個非常流行的日期/時間函數(shù)。 DateDiff函數(shù)返回Variant(long),指定兩個指定日期之間的時間間隔數(shù)換句話說,它計算兩個日期之間的差異,并且您可以選擇函數(shù)計算該差異的間隔。。
比如,現(xiàn)在我們想計算作者的年齡。為此,我們首先需要創(chuàng)建一個新查詢并添加authors表,然后添加FirstName,LastName和BirthDay字段。
我們可以通過計算他們的出生日期或生日與今天的日期之間的差異來計算人的年齡。
讓我們嘗試使用DateDiff函數(shù)在一個新的領(lǐng)域。
讓我們稱之為Age,后跟一個冒號,然后寫DateDiff函數(shù)。
現(xiàn)在,運行查詢,您將看到顯示每個作者年齡的新字段。
Format()函數(shù)返回一個字符串,其中包含根據(jù)格式表達式中包含的指令格式化的表達式。下面是可以在Format()function.ss中使用的用戶定義格式的列表
設(shè)置 | 描述 |
---|---|
yyyy | Year |
q | Quarter |
m | Month |
y | Day of year |
d | Day |
w | Weekday |
ww | Week |
h | Hour |
n | Minute |
s | Second |
現(xiàn)在讓我們返回到您的查詢,并使用Format()函數(shù)在同一個字段中添加更多字段。
鍵入格式化函數(shù)。第一個函數(shù)參數(shù)將是一個表達式,它幾乎可以是任何東西。現(xiàn)在讓我們把生日字段作為第一個,下一個是寫我們的格式。在這種情況下,我們需要月,日,日,日。在引號中寫入“mmdd”,然后運行查詢。
它現(xiàn)在采取從生日字段的日期,4是月和17是天。
我們在下面的字段中添加“mmm”和“mmmm”而不是“mmdd”,如下面的截圖所示。
運行查詢,你會看到的結(jié)果如下面的屏幕截圖。
在下一個字段中,它從該生日的月份名稱返回前3個字符,在最后一個字段中,您將獲得完整的月份名稱。
要查看到從生日開始的一個月,我們要添加“yyyy”,如下面的截圖所示。
讓我們再次運行查詢。
你現(xiàn)在將看到月份后面跟一個逗號,然后是年份。
IIf()函數(shù)是“Immediate If”的縮寫,此函數(shù)將表達式計算為true或false,并為每個返回值。它最多有三個函數(shù)參數(shù),所有這些參數(shù)都是必需的。
讓我們舉一個簡單的例子。我們將使用查詢設(shè)計創(chuàng)建一個新查詢,并添加tblAuthors表,然后添加以下字段。
您現(xiàn)在可以看到我們有三個字段 - FirstName,MiddleInitial,LastName,然后是這個連接字段,它將所有三個字段拉在一起。讓我們運行您的查詢以查看此查詢的結(jié)果。
現(xiàn)在,你可以看到查詢的結(jié)果,但你也會注意到一些記錄沒有中間的初始。例如,Joyce Dyer記錄沒有中間的初始值,但在FullName字段中,您將看到真正不需要的周期。所以,回到設(shè)計視圖。在這里,我們將使用IIf函數(shù)以不同的方式連接名稱。
讓我們在另一個字段中寫入名稱,并將其命名為FullName1,然后鍵入IIf函數(shù)。
Immediate If函數(shù)的第一個函數(shù)參數(shù)將是你的表達式。在表達式中,我們將看到中間的初始字段是空白還是為空。
下一個參數(shù)是真正的部分。所以,如果中間的initial是null,那么我們將顯示FirstName和LastName。
現(xiàn)在,對于我們的錯誤部分 - 如果MiddleInitial不為null,那么我們將顯示FirstName,MiddleInitial和LastName。
現(xiàn)在讓我們運行查詢,您將看到如下面截圖所示的結(jié)果。
更多建議: