我們編寫程序,有許多是工作中的統計系統,而單位的各項統計又以會計日期為準,會計日期不一定從1日到31日,有的公司就是從上個月的26日到這個月的25日算一個月,這樣用 access 的報表向導自動生成的報表就不成了。當然,還是我們自己動手實現吧,其實很簡單,一學就會。
1.認識幾個有關時間的函數
2.創建讓用戶選擇日期的窗體
3.根據用戶選擇的日期自動計算期初和期末日期
4.讓報表處理期初和期末之間的數據
1.認識幾個有關時間的函數
1.cdate(日期表達式)
將日期表達式轉換成日期類型的數據。
日期表達式是任何可以解釋成日期的表達式,包含日期文字,可以看作日期的字符串以及從函數返回的日期。
比如:mydate = cdate("99-5-20") ,這樣的日期表達式必須加雙引號,否則結果不可預料。
cdate 依據系統上的區域設置來決定日期的格式。如果提供的格式為不可識別的日期設置,則不能正確判斷年、月、日的順序。
2.now()
返回當前計算機系統設置的日期和時間。
3.year(日期表達式)
返回表示年份的整數。
比如:year("00-6-15") = 2000
4.month(日期表達式)
返回 1 到 12 之間的整數,表示一年中的某月。
比如:month("00-6-15") = 6
5.dateadd(interval, number, date)
返回一個日期,這一日期加上了一段時間間隔。可以用 dateadd 來計算距今天為三十天的日期;或者計算距現在為 45 分鐘的時間。
dataadd 函數參數
| 參數 | 說明 |
| interval | 字符串表達式,是所要加上去的時間間隔的單位。 |
| number | 數值表達式,是要加上的時間間隔的數目。其數值可以為正數(得到未來的日期),也可以為負數(得到過去的日期)。 |
| date | 日期表達式,這一日期還加上了時間間隔。 |
| 值 | 說明 |
| yyyy | 年 |
| q | 季 |
| m | 月 |
| y | 一年的日數 |
| d | 日 |
| w | 一周的日數 |
| ww | 周 |
| h | 時 |
| n | 分鐘 |
| s | 秒 |
比如:
dateadd("d",10,"2000-6-18") = 2000-06-28
dateadd("m",-1,"2000-6-18") = 2000-05-18
2.創建讓用戶選擇日期窗體

創建一個窗體,添加以下控件:一個“年”組合框,一個“月”組合框,一個“開始日期”文本框,一個“結束日期”文本框。如果添加組合框時出現控件向導,取消向導。

把“年”組合框的數據屬性設置如上圖,這樣用戶就只能選擇1999-2002年,當然還可以再增加年份。默認值為當前日期的年份。

和“年”組合框類似,把“月”組合框的數據屬性設置如上圖,這樣用戶就只能選擇1-12月。默認值為當前日期的月份。
3.根據用戶選擇的日期自動計算期初和期末日期
在“開始日期”文本框的控件來源處填寫:
=dateadd("m", -1, cdate([年] & "-" & [月] & "-26"))
剛才學到的函數就用上了,這是個嵌套表達式,cdate([年] & "-" & [月] & "-26") 表示用戶選擇的日期的26日,整個表達式表示用戶選擇的日期前一個月的26日。這里的“年”和“月”都加上了[ ],表示它們是控件。
在“結束日期”文本框的控件來源處填寫:
=cdate([年] & "-" & [月] & "-25")
表示用戶選擇的日期的25日。

這是窗體運行的效果,開始日期和結束日期是隨著年和月的變化而隨時更新的。
4.讓報表處理期初和期末之間的數據
設計一個報表,在它的記錄來源里選擇你的表或查詢,在其中涉及到日期的字段填寫準則:between [forms]![選擇日期]![開始日期] and [forms]![選擇日期]![結束日期] ,這樣報表就會只處理在“開始日期”和“結束日期”之間的數據了。
最后,再為你窗口添加一個啟動報表的命令按鈕,就大功告成了!
下圖是一個報表運行的實例

這個報表的10月份,實際是9月26日至10月25日
新聞熱點
疑難解答