添加日志宏到你的表單中
這是你要對你的數據庫添加對象日志記錄所需要做的所有事情。以設計模式打開你的表單,如圖5中所做的。並打開設計條欄上的屬性面板,選擇On Close事件。從列表中選擇“mcrLogUsage.LogForm”。注意,在代碼中使用的是Close事件,因為它在這個日志記錄代碼中要比On Open事件更好。這些是所要做的所有步驟,下一次當你的用戶打開這個表單(之後關閉)時,就會在日志中添加一條記錄。
圖5 –怎樣在你的表單和報表中建立日志宏
當你遵循下面的建立指導,那麼每次有人打開這個表單時都會有一個日志記錄(如圖6所示)。
圖6 -保存到UserObjects日志表中的數據
添加日志宏到你的報表中
要創建報表的一個日志入口,所要做的和為表單所做的一樣。在設計視圖中打開報表,顯示屬性面板,找到Close Event,這一次選擇mcrLogUsage.LogReport。
找出某對象被使用了多少次
要找出一個對象被使用了多少次,建立一個具有以下SQL語句的查詢。
SELECT ObjectName, ObjectType, Count(OpenTime) AS NoTimes
FROM UserObjectLogs
GROUP BY ObjectName, ObjectType;
如果你運行它,你將得到如下面圖7所示的結果。
圖7 你的對象使用總計
軟件安裝總結
這是你找出你最常用的表單和報表所需要的所有東西。然後如果你需要加快一些表單和報表,那麼集中於那些最常被使用的。記住,子表單和子報表不會包含進這個日志中
技術(和興趣)細節
對Access 2007的許多改進都是旨在制作很好的、可下載的模板(如圖1中所示)。因此在宏方面有許多創新來創建可以自由傳送VBA代碼的數據庫模板。使其發生的最重要的一個改變是一個叫做TempVar的新對象。讓我們看看在這個數據庫中怎樣使用TempVar。
在模塊logObjects_FXL12中,你將看到提取所關注的最後一個表單或報表並找出用戶Windows帳戶的代碼。然後這些結果將放到3個不同的TempVar中。然後會打開一個使用這些TempVars的查詢來插入一個新記錄到我們的用戶日志表中。
OptionCompareDatabase
OptionExplicit
PublicFunctionLogFormUsage()
OnErrorResumeNext
TempVars.Add"ObjectName",Screen.ActiveForm.Name
TempVars.Add"ObjectType","3"
CallLogUsage
ExitFunction
EndFunction
PublicFunctionLogReportUsage()
OnErrorResumeNext
TempVars.Add"ObjectName",Screen.ActiveReport.Name
TempVars.Add"ObjectType","4"
CallLogUsage
ExitFunction
EndFunction
PublicSubLogUsage()
OnErrorResumeNext
TempVars.Add"WindowsAccount",User_FX
DoCmd.SetWarningsFalse
DoCmd.OpenQuery"qryUpdateLogs"
DoCmd.SetWarningsTrue
ExitSub
EndSub
注意:如果你仔細地看了這個代碼,你會看到一個叫做User_FX的函數,它提取Windows用戶帳戶。這個代碼在下載的數據庫中。
TempVars與全局VBA變量相比較
TempVars在查詢和表單控制和宏以及VBA間轉移值方面是很方便的。在2007年之前,你只能使用全局變量來做到這些,而且它還只能用於VBA代碼。全局變量的問題,是如果VBA代碼失敗了,那麼你將丟失全局變量中的信息。而TempVars比它強大得多。
使用TempVars的查詢
在這個數據庫中你將發現添加了叫做qryUpdateLogs的查詢。它從TempVars獲得它的值,如圖8所示。TempVars 真的是一個不用使用docmd.RunSQL或CurrentDB.Execute就將復雜的東西放到一個查詢中的簡單方法
圖8-這顯示了TempVars怎樣在對象間移動信息
宏
最後,如果你看看圖9,你將看到我所建立的兩個添加到你表格和報表Close events中的宏。你將看到這些宏存儲在一個宏容器中,而且你還將注意到在頂端有兩行宏邏輯,用來阻止任何人讓宏自己運行,因為在這種情況下這個代碼會失敗。
圖9