MicrosoftAccess秘密技巧和陷阱
來源:程序員人生 發布時間:2014-01-23 15:55:03 閱讀次數:2798次
不正確地調用Windows應用程序接口可能會產生一些意想不到的副作用以及潛在地對一個應用程序的代碼及數據段的破壞正確地使用一個空的位指針在MicrosoftAccess中是十分必要的
當對表格和報表進行操作時MicrosoftAccess有一個無正式文本的特性這個特性允許你從設計視窗性質sheetwindow中進行過程調用調用的方法是同時按下shift和F鍵
Microsoft AccessBasic提供了一個豐富的開發環境這個開發環境給你足夠的靈活性和對MicrosoftWindows應用程序接口的控制同時保護你使你免遭用高級或低級語言開發環境開發時所碰到的各種麻煩不過許多優化有效數據和模塊化方面只能是應用程序設計者才能使用開發者應致力于謹慎地使用算法除了一般的程序設計概念還有一些特別的存儲空間的管理技術正確使用這些技術可以提高應用程序的執行速度減少應用程序所要好的存儲資源提高速度和減少代碼量
你可以用幾種技巧來提高你的編碼速度但是卻找不到有效的算法的替代者接下來的幾點建議可以提高你的編碼速度同時又減少你的應用程序消耗的存儲空間
使用整形數據類型進行數學運算
即使MicrosoftAccess會使用一個聯合處理器來處理浮點型算術整型數算術也總是要快一些當你的計算不含有小數盡量使用整型或長整型而不是變量或雙整型整型除法同樣也要比浮點除法要快在使用其他一些有效的數據類型時會警告沒有任何東西可以替換有效的運算法則
避免使用過程調用
避免在循環體中使用子程序或函數調用每一次調用都因額外的工作和時間而給編碼增大了負擔每一次調用都要求把函數的局部變量和參數壓棧而棧的大小是固定的不能隨便加大并且同時還要于MicrosoftAccess共享
謹慎使用不定長數據類型
不定長數據類型提供了更大的靈活性比如說允許正確處理空值和自動處理溢出另外這種數據類型比傳統的數據類型要大并消耗更多的存儲空間前面還曾經提到過不定長數據類型的變量在數學計算中比較慢
用變量存放經常使用的屬性
對變量進行查找和設置都比對屬性進行這些操作要快如果你要得到或查閱一個屬性值許多次那么把這個屬性分配給一個變量并用這個變量來代替屬性那么你的代碼將要運行快得多例如在一個循環中你查閱某表格中得一個控制的屬性那么在循環外把屬性分配給一個變量然后在循環中用查詢一個變量來代替查閱一個屬性的方法要比較快
預載表格
當你的應用程序啟動并且把它們的可見屬性設置位false時如果你安裝了你所有的表格那么你的應用程序的性能會讓你感覺挺快當你需要顯示一個表格時你只需要把該表格的可見屬性設置為true這要比安裝一個表格要快得多需要記住的是為你安裝的每個表格你都要從應用程序的全局堆中消耗存儲空間
AccessBasic中的陷阱
在AccessBasic中經常碰到的陷阱是對動態連接庫(DLLS)中的外部過程的調用當你提供程序給你的用戶調用外部動態鏈接庫時將出現使用警告否則你將得到一條錯誤信息試圖用相同的函數定義安裝模塊
使用唯一的別名
在AccessBasic中如果你知道入口點(動態鏈接庫中函數的名字)你可以調用動態鏈接庫中的外部函數不過使用這一方法的限制性在于你只能聲明外部函數一次如果你安裝了調用了你的模塊調用的相同的Windows應用程序接口你不會得到一個不為人所知的錯誤試圖用相同的函數定義安裝模塊
你嘗試安裝的模塊要么是包含有相同的函數名要么是包含在已存在的模塊中有的過程名刪除這些過程在EDIT菜單中使用FIND命令找到重復的過程名要解決這一問題你需要使用一種叫做別名使用的技術這種技術允許你給你的過程一個獨一無二的名字但是你選擇的別名也有可能不是獨一無二的所以要使你取的名字唯一你可以用初始值和下劃線優先聲明你所有從動態鏈接庫中調用的過程比如聲明getActiveWindow為Declarebcb_GetActiveWindowLib Kernel Alias GetActiveWindow ()AsInteger如何傳遞一個空指針給動態鏈接庫一個空的位指針是有效的或是為一些動態鏈接庫要求具有參數要指定一個空值使用&當你的函數調用一個過程并傳遞一個表達式&&指定一個位的空指針在函數聲明中一個ASANY參數指示AccessBasic對那個參數不進行類型檢查同時把值傳遞到被調用的函數下面的編碼示范了一個正確的方法告訴你如何聲明一個給動態鏈接庫中的過程傳遞一個空指針參數的AccessBasic函數這段聲明了WriteProfileString應用程序接口函數這個函數來自于外部Windows動態鏈接庫kernelDeclareFunctionWriteProfileString Lib Kernel (ByVallpApplicationNameAs Any ByVal lpKeyName As Any ByVal lpStringAsAny)接下來的函數調用了一個外部過程位每個參數指定一個空值這將使WriteProfileString充滿它的內部
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈