作為一名數(shù)據(jù)庫(kù)程序員,你的主要任務(wù)是讓你的用戶能快速地選擇、管理和訪問(wèn)他們所需要的信息。其他的工作幾乎都是一成不變的,只要你的數(shù)據(jù)庫(kù)應(yīng)用程序執(zhí)行速度越快,你的程序效率越高。這篇文章的目的就是突出各種不同的技巧和策略,通過(guò)優(yōu)化程序來(lái)提高速度,讓你的Microsoft Access 數(shù)據(jù)庫(kù)應(yīng)用程序的效率更高,這樣也可以幫助你完成作為一名數(shù)據(jù)庫(kù)開(kāi)發(fā)者的主要使命。
硬件
瞄準(zhǔn)速度問(wèn)題的根本
為了提高你的數(shù)據(jù)庫(kù)程序的速度,自然而然地你會(huì)想到去注意影響速度最基本的幾個(gè)部分,我們將從處理這幾個(gè)部分著手。在你力圖提高你的數(shù)據(jù)庫(kù)程序性能的時(shí)候,你的程序所運(yùn)行的硬件平臺(tái)將是的決定因素。顯而易見(jiàn),實(shí)現(xiàn)優(yōu)化的第一條原則應(yīng)該是較快的硬件=較快的數(shù)據(jù)庫(kù),當(dāng)然CPU和RAM是這個(gè)等式的核心所在。相信你一定注意到Microsoft Access 所聲明的,要達(dá)到一個(gè)令人滿意的性能,至少需要8MB的RAM和一個(gè)80486的CPU。一般情況下,用戶注意到這一點(diǎn)是理所應(yīng)當(dāng)?shù)模覅s見(jiàn)過(guò)許多用戶為他們的Microsoft Access 的執(zhí)行速度而感到沮喪,當(dāng)我問(wèn)及他們使用什么機(jī)器運(yùn)行此程序時(shí),他們告訴我是一臺(tái)80386,并且是在運(yùn)行一臺(tái)服務(wù)器上的一個(gè)MSACCESS.EXE。所以,在相信你的用戶通過(guò)下面的方法固然能提高其程序性能的同時(shí),始終需要強(qiáng)調(diào)的仍然是,在Microsoft Access 執(zhí)行過(guò)程中,硬件才是關(guān)鍵的問(wèn)題。
有效的磁盤訪問(wèn)
假定已經(jīng)有了一個(gè)令人滿意的硬件配置,下面讓我們討論一下如何才能提高M(jìn)icrosoft Access 在此平臺(tái)上的運(yùn)行速度。就這個(gè)問(wèn)題,對(duì)你的數(shù)據(jù)庫(kù)程序而言,影響其性能的第二位因素就是磁盤訪問(wèn)了。在執(zhí)行過(guò)程中,對(duì)物理磁盤的訪問(wèn)總是一個(gè)速度的瓶頸(與訪問(wèn)存儲(chǔ)在 RAM中的數(shù)據(jù)相比較而言),所以,你應(yīng)該盡量減少對(duì)磁盤的訪問(wèn)。然而,由于你的應(yīng)用程序總是要和一些磁盤或其他一些物理設(shè)備打交道,所以,你的目標(biāo)應(yīng)該是保證所有的磁盤訪問(wèn)都盡可能有效。要實(shí)現(xiàn)這一點(diǎn),方法是經(jīng)常整理你的磁盤數(shù)據(jù)碎片,整理你的數(shù)據(jù)庫(kù)所在的磁盤驅(qū)動(dòng)器以及所有你執(zhí)行你的數(shù)據(jù)庫(kù)程序時(shí)要涉及的磁盤驅(qū)動(dòng)器,而且你還應(yīng)提醒你的用戶定期清理磁盤碎片,以此保證磁盤訪問(wèn)一直有效。這將程度地減少在對(duì)物理磁盤進(jìn)行讀寫而花費(fèi)的時(shí)間,盡管這些讀寫是不可避免的,同時(shí)優(yōu)化了整個(gè)體系的性能。
使RAM化/對(duì)磁盤訪問(wèn)的頻率最小化
下一個(gè)主題是使你的數(shù)據(jù)庫(kù)程序與物理磁盤驅(qū)動(dòng)器打交道的頻率最小。要做到這一點(diǎn)關(guān)鍵是盡可能多的釋放RAM空間給你的應(yīng)用程序使用。要實(shí)現(xiàn)這一點(diǎn),你需要做到以下幾點(diǎn):
增加緩沖區(qū)的尺寸
首先涉及到你對(duì)緩沖區(qū)尺寸的設(shè)置。緩沖區(qū)的尺寸指的是Microsoft Access作為內(nèi)部存儲(chǔ)空間而保留的RAM的數(shù)目。存儲(chǔ)空間越大,用戶需求的數(shù)據(jù)能在RAM中找到可能性越大,同時(shí)減少了對(duì)物理磁盤的訪問(wèn)頻率。Microsoft Access 需要的最小緩沖區(qū)是512KB,如果你的硬件系統(tǒng)有多于4MB的RAM,那么你就可以為Microsoft Access 多分配一些供其使用(這樣也增加了系統(tǒng)的性能)。要做到這一點(diǎn),只需要在MSACCESS.INI(在你的windows目錄下)文件中增加對(duì)緩沖區(qū)的設(shè)置,使用你的文本編輯器,例如記事本,在此文件中找到 [Option] 段,在其中加這樣一句話:
MaxBufferSize = xxxxx
這其中的xxxxx即是為你的應(yīng)用程序?qū)Υ鎯?chǔ)空間分配而作的新設(shè)置(例如,設(shè)置MaxBufferSize=2048將為Microsoft Access分配2MB的緩沖區(qū)空間)。那么,你究竟應(yīng)該分配多少才算合適呢?除了“盡可能多”,其他的還真難說(shuō)。你需要手動(dòng)地調(diào)節(jié)這個(gè)設(shè)置,同時(shí)需要試著讓你的硬件都能提供以下條件:1)不能妨礙用戶同時(shí)正在運(yùn)行的程序,2)不會(huì)影響其自身底層操作系統(tǒng)的運(yùn)行效率(你可能會(huì)在程序啟動(dòng)時(shí)想通過(guò).INI文件查看一下Microsoft Access自身的配置,因此,任何對(duì)MSACCESS.INI文件的修改都將只能在下一次Microsoft Access啟動(dòng)時(shí)才能奏效,而對(duì)現(xiàn)在正在運(yùn)行的Microsoft Access程序沒(méi)有任何的影響)。
避免裝載Wizards
為了釋放更多的內(nèi)存以供Microsoft Access使用,另一個(gè)你可以采取的步驟是:如果你不使用Wizards,那么就不要裝載它。你可以打開(kāi)MSACCESS.INI文件,找到[libraries]部分,在“wizards.mdb=ro”這一句之前加一個(gè)分號(hào),這樣就避免了自動(dòng)加載Wizards。這樣做將能夠釋放315B的RAM提供給Microsoft Access以作己用,這樣做的好處不僅在于提高了運(yùn)行時(shí)間的性能,同時(shí)使每個(gè)應(yīng)用程序平均減少了大約10秒的安裝時(shí)間。
解除墻紙/背景位圖
解除標(biāo)準(zhǔn)windows墻紙背景可以釋放RAM中任何一處25K到350K的空間。解除復(fù)雜的位圖將釋放更多的內(nèi)存空間。
創(chuàng)建永久交換文件
創(chuàng)建一個(gè)永久交換文件(相對(duì)于臨時(shí)文件而言)將增加你額外的性能。關(guān)于這一點(diǎn),你可以求助于關(guān)于這方面的幫助文檔,它將指導(dǎo)你在運(yùn)行數(shù)據(jù)庫(kù)應(yīng)用程序的機(jī)器上創(chuàng)建這一文件。
到現(xiàn)在為止,我們已經(jīng)解決了有關(guān)硬件平臺(tái)、的磁盤訪問(wèn)效率的問(wèn)題,并且為你的應(yīng)用程序增加了有效的RAM存儲(chǔ)空間,接下來(lái)讓我們轉(zhuǎn)向優(yōu)化應(yīng)用程序本身。
Microsoft Access自身特點(diǎn)
壓縮、壓縮
要保證經(jīng)常性的壓縮你的程序代碼。當(dāng)你在開(kāi)發(fā)和使用Microsoft Access數(shù)據(jù)庫(kù)時(shí),你要經(jīng)常性地增加和刪除數(shù)據(jù)、代碼等等?,F(xiàn)在的問(wèn)題是Microsoft Access并不能有效地釋放已分配的但被刪除的對(duì)象空間,這將意味著即使你刪除了一個(gè)對(duì)象,而這個(gè)對(duì)象仍然在你的數(shù)據(jù)庫(kù)中占據(jù)空間。壓縮數(shù)據(jù)庫(kù)將迫使Microsoft Access真正刪除這些對(duì)象并回收其占據(jù)的空間,從而使得你的數(shù)據(jù)庫(kù)盡量小但卻更有效。我曾把逐字逐句查詢的平均時(shí)間減少了30%——50%,而做到這一點(diǎn)僅僅是通過(guò)去壓縮那些由于經(jīng)常使用又缺乏壓縮而變得過(guò)度膨脹的數(shù)據(jù)庫(kù)程序,因此,在運(yùn)行程序的過(guò)程中,不要忽視壓縮過(guò)程的重要性。正如你要定期清除硬盤數(shù)據(jù)碎片一樣,你和你的用戶也應(yīng)當(dāng)定期壓縮數(shù)據(jù)庫(kù)來(lái)保證它始終地運(yùn)行。
只用代碼
你可能希望通過(guò)宏操作來(lái)搭建一個(gè)應(yīng)用程序的模型,一旦你開(kāi)始優(yōu)化你的程序的最終性能,一定要把所有的宏重新寫成代碼。這主要是因?yàn)镸icrosoft Access代碼要比宏運(yùn)行得快的多。但遺憾的是有三個(gè)宏操作你不能將他們改寫成代碼,這三個(gè)宏是Autokeys、Autoexec和Addmenu操作,這三個(gè)宏在Microsoft Access中沒(méi)有相應(yīng)的等價(jià)類,因此你只能被迫使用他們。不過(guò),你可以克服Autoexec的限制,只需要定義Autoexec為調(diào)用你的Access Basic Autoexec函數(shù)。
優(yōu)化數(shù)據(jù)類型聲明
當(dāng)你在你的代碼中聲明數(shù)據(jù)類型時(shí),你應(yīng)該試著盡可能精確。因?yàn)槿羰且粋€(gè)變量的類型(如果沒(méi)有特別聲明,缺省為可變類型)非常靈活自由的話,那么這種類型同時(shí)也將是最浪費(fèi)內(nèi)存的一種類型。這樣一來(lái),如果你知道check Balance這個(gè)變量不需要超過(guò)4位小數(shù)精度的話,那么就把它定義成確定類型而不是可變類型。對(duì)你的過(guò)程函數(shù)的定義同樣也可以如此操作(比如說(shuō),把函數(shù)PostCredit()聲明為整形,而不是Function PostCredit())。請(qǐng)注意這樣一個(gè)事實(shí),如果你估計(jì)一個(gè)變量將會(huì)被處理成一個(gè)空值,那么你需要去把它定義成一個(gè)可變類型而不是一個(gè)確定的嚴(yán)格的數(shù)據(jù)類型,否則你會(huì)得到一個(gè)錯(cuò)誤信息。同樣地,要注意整形除法和浮點(diǎn)除法之間的差別。
經(jīng)常使用From/Report變量
在你的程序中,你需要保證你能提前解決盡可能多的查詢工作。這意味著什么呢?舉個(gè)例子來(lái)說(shuō)明:如果你想在代碼中查閱一個(gè)名為[NetPrice]的文本框,你可以使用這樣一條語(yǔ)句:
Mytemprariable=Forms![Customer Invoice]![Net price]
對(duì)于這條指令,Microsoft Access首先在Forms對(duì)象里搜索名為[Customer Invoice]的表,一旦它找到這張表,Microsoft Access接下來(lái)尋找名為[NetPrice]的控制,并進(jìn)行正確的操作。從這個(gè)例子可以看出,Microsoft Access經(jīng)過(guò)兩次查詢最終確定我們指定的控制。如果你想在同一程序(函數(shù)或者子函數(shù))中再次查詢[Customer Invoice]表中任一控制,你可以刪除可能會(huì)在下次出現(xiàn)的多余語(yǔ)句,而只使用如下語(yǔ)句:
Dim F as form
Set F = Forms![Customer Invoice]
現(xiàn)在,你的Form變量將自動(dòng)指向Form[Customer Invoice],允許Microsoft Access 避免每次在你需要查找[Customer Invoice]表中任一對(duì)象時(shí),都要把數(shù)據(jù)庫(kù)的Form對(duì)象中全部搜索一次。為了查閱控制[NetPrice],你只需要簡(jiǎn)單地使用下面的語(yǔ)句:
Mytempvariable=F![NetPrice]
你也可以對(duì)Report對(duì)象作相同的操作(比如,set R=Reports![MyReport])。當(dāng)你在一個(gè)函數(shù)中僅僅只對(duì)一個(gè)Form或Report訪問(wèn)一次,你可能在速度性能方面得不到什么太大得好處,但是一旦你開(kāi)始在同一個(gè)Form或Report中進(jìn)行的訪問(wèn)操作超過(guò)一次,你將會(huì)看到明顯的時(shí)間減少。于是,通過(guò)使Microsoft Access避免作多余的查閱,你將大大地提高你程序的速度。
在可以應(yīng)用的地方使用windows函數(shù)
無(wú)論何時(shí),只要相關(guān),總是可以用一個(gè)windows函數(shù)調(diào)用來(lái)代替Access Basic代碼執(zhí)行同一個(gè)操作。這樣你將節(jié)省開(kāi)發(fā)時(shí)間,因?yàn)閣indows函數(shù)調(diào)用是已經(jīng)完成編碼并經(jīng)過(guò)優(yōu)化,同時(shí)也因?yàn)樗鼈兪怯肅語(yǔ)言編寫的(機(jī)器可執(zhí)行),而Access Basic代碼則要被編譯成P代碼形式,同時(shí)需要在執(zhí)行時(shí)一行一行地解釋。一個(gè)最普通的例子是custom.ini設(shè)置。你可以使用Access Basic文件函數(shù)去得到一個(gè)自由文件指針,打開(kāi)文件,讀/寫文件,然后關(guān)閉它。但是如果你完全可以簡(jiǎn)單地使用GetPrivateProfileString和WritePrivateProfileString函數(shù)來(lái)實(shí)現(xiàn),它們既快且已經(jīng)編碼優(yōu)化隨手可用,你為什么還要自尋煩惱呢?(參考:“Enhanced Microsoft Access: Using the Win16 API”)
你的Microsoft Access數(shù)據(jù)庫(kù)應(yīng)用程序運(yùn)行速度越快,你就能更好地完成你的任務(wù),也就是向你的用戶提供的選擇、管理、發(fā)送他們的數(shù)據(jù)的能力。我真誠(chéng)希望以上這些小技巧能協(xié)助你達(dá)到這個(gè)目標(biāo)。
硬件
瞄準(zhǔn)速度問(wèn)題的根本
為了提高你的數(shù)據(jù)庫(kù)程序的速度,自然而然地你會(huì)想到去注意影響速度最基本的幾個(gè)部分,我們將從處理這幾個(gè)部分著手。在你力圖提高你的數(shù)據(jù)庫(kù)程序性能的時(shí)候,你的程序所運(yùn)行的硬件平臺(tái)將是的決定因素。顯而易見(jiàn),實(shí)現(xiàn)優(yōu)化的第一條原則應(yīng)該是較快的硬件=較快的數(shù)據(jù)庫(kù),當(dāng)然CPU和RAM是這個(gè)等式的核心所在。相信你一定注意到Microsoft Access 所聲明的,要達(dá)到一個(gè)令人滿意的性能,至少需要8MB的RAM和一個(gè)80486的CPU。一般情況下,用戶注意到這一點(diǎn)是理所應(yīng)當(dāng)?shù)模覅s見(jiàn)過(guò)許多用戶為他們的Microsoft Access 的執(zhí)行速度而感到沮喪,當(dāng)我問(wèn)及他們使用什么機(jī)器運(yùn)行此程序時(shí),他們告訴我是一臺(tái)80386,并且是在運(yùn)行一臺(tái)服務(wù)器上的一個(gè)MSACCESS.EXE。所以,在相信你的用戶通過(guò)下面的方法固然能提高其程序性能的同時(shí),始終需要強(qiáng)調(diào)的仍然是,在Microsoft Access 執(zhí)行過(guò)程中,硬件才是關(guān)鍵的問(wèn)題。
有效的磁盤訪問(wèn)
假定已經(jīng)有了一個(gè)令人滿意的硬件配置,下面讓我們討論一下如何才能提高M(jìn)icrosoft Access 在此平臺(tái)上的運(yùn)行速度。就這個(gè)問(wèn)題,對(duì)你的數(shù)據(jù)庫(kù)程序而言,影響其性能的第二位因素就是磁盤訪問(wèn)了。在執(zhí)行過(guò)程中,對(duì)物理磁盤的訪問(wèn)總是一個(gè)速度的瓶頸(與訪問(wèn)存儲(chǔ)在 RAM中的數(shù)據(jù)相比較而言),所以,你應(yīng)該盡量減少對(duì)磁盤的訪問(wèn)。然而,由于你的應(yīng)用程序總是要和一些磁盤或其他一些物理設(shè)備打交道,所以,你的目標(biāo)應(yīng)該是保證所有的磁盤訪問(wèn)都盡可能有效。要實(shí)現(xiàn)這一點(diǎn),方法是經(jīng)常整理你的磁盤數(shù)據(jù)碎片,整理你的數(shù)據(jù)庫(kù)所在的磁盤驅(qū)動(dòng)器以及所有你執(zhí)行你的數(shù)據(jù)庫(kù)程序時(shí)要涉及的磁盤驅(qū)動(dòng)器,而且你還應(yīng)提醒你的用戶定期清理磁盤碎片,以此保證磁盤訪問(wèn)一直有效。這將程度地減少在對(duì)物理磁盤進(jìn)行讀寫而花費(fèi)的時(shí)間,盡管這些讀寫是不可避免的,同時(shí)優(yōu)化了整個(gè)體系的性能。
使RAM化/對(duì)磁盤訪問(wèn)的頻率最小化
下一個(gè)主題是使你的數(shù)據(jù)庫(kù)程序與物理磁盤驅(qū)動(dòng)器打交道的頻率最小。要做到這一點(diǎn)關(guān)鍵是盡可能多的釋放RAM空間給你的應(yīng)用程序使用。要實(shí)現(xiàn)這一點(diǎn),你需要做到以下幾點(diǎn):
增加緩沖區(qū)的尺寸
首先涉及到你對(duì)緩沖區(qū)尺寸的設(shè)置。緩沖區(qū)的尺寸指的是Microsoft Access作為內(nèi)部存儲(chǔ)空間而保留的RAM的數(shù)目。存儲(chǔ)空間越大,用戶需求的數(shù)據(jù)能在RAM中找到可能性越大,同時(shí)減少了對(duì)物理磁盤的訪問(wèn)頻率。Microsoft Access 需要的最小緩沖區(qū)是512KB,如果你的硬件系統(tǒng)有多于4MB的RAM,那么你就可以為Microsoft Access 多分配一些供其使用(這樣也增加了系統(tǒng)的性能)。要做到這一點(diǎn),只需要在MSACCESS.INI(在你的windows目錄下)文件中增加對(duì)緩沖區(qū)的設(shè)置,使用你的文本編輯器,例如記事本,在此文件中找到 [Option] 段,在其中加這樣一句話:
MaxBufferSize = xxxxx
這其中的xxxxx即是為你的應(yīng)用程序?qū)Υ鎯?chǔ)空間分配而作的新設(shè)置(例如,設(shè)置MaxBufferSize=2048將為Microsoft Access分配2MB的緩沖區(qū)空間)。那么,你究竟應(yīng)該分配多少才算合適呢?除了“盡可能多”,其他的還真難說(shuō)。你需要手動(dòng)地調(diào)節(jié)這個(gè)設(shè)置,同時(shí)需要試著讓你的硬件都能提供以下條件:1)不能妨礙用戶同時(shí)正在運(yùn)行的程序,2)不會(huì)影響其自身底層操作系統(tǒng)的運(yùn)行效率(你可能會(huì)在程序啟動(dòng)時(shí)想通過(guò).INI文件查看一下Microsoft Access自身的配置,因此,任何對(duì)MSACCESS.INI文件的修改都將只能在下一次Microsoft Access啟動(dòng)時(shí)才能奏效,而對(duì)現(xiàn)在正在運(yùn)行的Microsoft Access程序沒(méi)有任何的影響)。
避免裝載Wizards
為了釋放更多的內(nèi)存以供Microsoft Access使用,另一個(gè)你可以采取的步驟是:如果你不使用Wizards,那么就不要裝載它。你可以打開(kāi)MSACCESS.INI文件,找到[libraries]部分,在“wizards.mdb=ro”這一句之前加一個(gè)分號(hào),這樣就避免了自動(dòng)加載Wizards。這樣做將能夠釋放315B的RAM提供給Microsoft Access以作己用,這樣做的好處不僅在于提高了運(yùn)行時(shí)間的性能,同時(shí)使每個(gè)應(yīng)用程序平均減少了大約10秒的安裝時(shí)間。
解除墻紙/背景位圖
解除標(biāo)準(zhǔn)windows墻紙背景可以釋放RAM中任何一處25K到350K的空間。解除復(fù)雜的位圖將釋放更多的內(nèi)存空間。
創(chuàng)建永久交換文件
創(chuàng)建一個(gè)永久交換文件(相對(duì)于臨時(shí)文件而言)將增加你額外的性能。關(guān)于這一點(diǎn),你可以求助于關(guān)于這方面的幫助文檔,它將指導(dǎo)你在運(yùn)行數(shù)據(jù)庫(kù)應(yīng)用程序的機(jī)器上創(chuàng)建這一文件。
到現(xiàn)在為止,我們已經(jīng)解決了有關(guān)硬件平臺(tái)、的磁盤訪問(wèn)效率的問(wèn)題,并且為你的應(yīng)用程序增加了有效的RAM存儲(chǔ)空間,接下來(lái)讓我們轉(zhuǎn)向優(yōu)化應(yīng)用程序本身。
Microsoft Access自身特點(diǎn)
壓縮、壓縮
要保證經(jīng)常性的壓縮你的程序代碼。當(dāng)你在開(kāi)發(fā)和使用Microsoft Access數(shù)據(jù)庫(kù)時(shí),你要經(jīng)常性地增加和刪除數(shù)據(jù)、代碼等等?,F(xiàn)在的問(wèn)題是Microsoft Access并不能有效地釋放已分配的但被刪除的對(duì)象空間,這將意味著即使你刪除了一個(gè)對(duì)象,而這個(gè)對(duì)象仍然在你的數(shù)據(jù)庫(kù)中占據(jù)空間。壓縮數(shù)據(jù)庫(kù)將迫使Microsoft Access真正刪除這些對(duì)象并回收其占據(jù)的空間,從而使得你的數(shù)據(jù)庫(kù)盡量小但卻更有效。我曾把逐字逐句查詢的平均時(shí)間減少了30%——50%,而做到這一點(diǎn)僅僅是通過(guò)去壓縮那些由于經(jīng)常使用又缺乏壓縮而變得過(guò)度膨脹的數(shù)據(jù)庫(kù)程序,因此,在運(yùn)行程序的過(guò)程中,不要忽視壓縮過(guò)程的重要性。正如你要定期清除硬盤數(shù)據(jù)碎片一樣,你和你的用戶也應(yīng)當(dāng)定期壓縮數(shù)據(jù)庫(kù)來(lái)保證它始終地運(yùn)行。
只用代碼
你可能希望通過(guò)宏操作來(lái)搭建一個(gè)應(yīng)用程序的模型,一旦你開(kāi)始優(yōu)化你的程序的最終性能,一定要把所有的宏重新寫成代碼。這主要是因?yàn)镸icrosoft Access代碼要比宏運(yùn)行得快的多。但遺憾的是有三個(gè)宏操作你不能將他們改寫成代碼,這三個(gè)宏是Autokeys、Autoexec和Addmenu操作,這三個(gè)宏在Microsoft Access中沒(méi)有相應(yīng)的等價(jià)類,因此你只能被迫使用他們。不過(guò),你可以克服Autoexec的限制,只需要定義Autoexec為調(diào)用你的Access Basic Autoexec函數(shù)。
優(yōu)化數(shù)據(jù)類型聲明
當(dāng)你在你的代碼中聲明數(shù)據(jù)類型時(shí),你應(yīng)該試著盡可能精確。因?yàn)槿羰且粋€(gè)變量的類型(如果沒(méi)有特別聲明,缺省為可變類型)非常靈活自由的話,那么這種類型同時(shí)也將是最浪費(fèi)內(nèi)存的一種類型。這樣一來(lái),如果你知道check Balance這個(gè)變量不需要超過(guò)4位小數(shù)精度的話,那么就把它定義成確定類型而不是可變類型。對(duì)你的過(guò)程函數(shù)的定義同樣也可以如此操作(比如說(shuō),把函數(shù)PostCredit()聲明為整形,而不是Function PostCredit())。請(qǐng)注意這樣一個(gè)事實(shí),如果你估計(jì)一個(gè)變量將會(huì)被處理成一個(gè)空值,那么你需要去把它定義成一個(gè)可變類型而不是一個(gè)確定的嚴(yán)格的數(shù)據(jù)類型,否則你會(huì)得到一個(gè)錯(cuò)誤信息。同樣地,要注意整形除法和浮點(diǎn)除法之間的差別。
經(jīng)常使用From/Report變量
在你的程序中,你需要保證你能提前解決盡可能多的查詢工作。這意味著什么呢?舉個(gè)例子來(lái)說(shuō)明:如果你想在代碼中查閱一個(gè)名為[NetPrice]的文本框,你可以使用這樣一條語(yǔ)句:
Mytemprariable=Forms![Customer Invoice]![Net price]
對(duì)于這條指令,Microsoft Access首先在Forms對(duì)象里搜索名為[Customer Invoice]的表,一旦它找到這張表,Microsoft Access接下來(lái)尋找名為[NetPrice]的控制,并進(jìn)行正確的操作。從這個(gè)例子可以看出,Microsoft Access經(jīng)過(guò)兩次查詢最終確定我們指定的控制。如果你想在同一程序(函數(shù)或者子函數(shù))中再次查詢[Customer Invoice]表中任一控制,你可以刪除可能會(huì)在下次出現(xiàn)的多余語(yǔ)句,而只使用如下語(yǔ)句:
Dim F as form
Set F = Forms![Customer Invoice]
現(xiàn)在,你的Form變量將自動(dòng)指向Form[Customer Invoice],允許Microsoft Access 避免每次在你需要查找[Customer Invoice]表中任一對(duì)象時(shí),都要把數(shù)據(jù)庫(kù)的Form對(duì)象中全部搜索一次。為了查閱控制[NetPrice],你只需要簡(jiǎn)單地使用下面的語(yǔ)句:
Mytempvariable=F![NetPrice]
你也可以對(duì)Report對(duì)象作相同的操作(比如,set R=Reports![MyReport])。當(dāng)你在一個(gè)函數(shù)中僅僅只對(duì)一個(gè)Form或Report訪問(wèn)一次,你可能在速度性能方面得不到什么太大得好處,但是一旦你開(kāi)始在同一個(gè)Form或Report中進(jìn)行的訪問(wèn)操作超過(guò)一次,你將會(huì)看到明顯的時(shí)間減少。于是,通過(guò)使Microsoft Access避免作多余的查閱,你將大大地提高你程序的速度。
在可以應(yīng)用的地方使用windows函數(shù)
無(wú)論何時(shí),只要相關(guān),總是可以用一個(gè)windows函數(shù)調(diào)用來(lái)代替Access Basic代碼執(zhí)行同一個(gè)操作。這樣你將節(jié)省開(kāi)發(fā)時(shí)間,因?yàn)閣indows函數(shù)調(diào)用是已經(jīng)完成編碼并經(jīng)過(guò)優(yōu)化,同時(shí)也因?yàn)樗鼈兪怯肅語(yǔ)言編寫的(機(jī)器可執(zhí)行),而Access Basic代碼則要被編譯成P代碼形式,同時(shí)需要在執(zhí)行時(shí)一行一行地解釋。一個(gè)最普通的例子是custom.ini設(shè)置。你可以使用Access Basic文件函數(shù)去得到一個(gè)自由文件指針,打開(kāi)文件,讀/寫文件,然后關(guān)閉它。但是如果你完全可以簡(jiǎn)單地使用GetPrivateProfileString和WritePrivateProfileString函數(shù)來(lái)實(shí)現(xiàn),它們既快且已經(jīng)編碼優(yōu)化隨手可用,你為什么還要自尋煩惱呢?(參考:“Enhanced Microsoft Access: Using the Win16 API”)
你的Microsoft Access數(shù)據(jù)庫(kù)應(yīng)用程序運(yùn)行速度越快,你就能更好地完成你的任務(wù),也就是向你的用戶提供的選擇、管理、發(fā)送他們的數(shù)據(jù)的能力。我真誠(chéng)希望以上這些小技巧能協(xié)助你達(dá)到這個(gè)目標(biāo)。