這篇文章概括了當使用Microsoft Access 時
通過使用Access Basic可以增加應用程序的執行速度
減少編碼量
同時也減少在為Microsoft Windows應用程序接口編程時
在開發應用程序中遇到的問題的技術
謹慎地使用變量和它所占用的存儲空間能有效地減少一個應用程序所消耗的資源
同時也全面提高了它的性能
不正確地調用Windows應用程序接口可能會產生一些意想不到的副作用
以及潛在地對一個應用程序的代碼及數據段的破壞
正確地使用一個空的
位指針在Microsoft Access 中是十分必要的
當對表格和報表進行操作時
Microsoft Access有一個無正式文本的特性
這個特性允許你從設計視窗性質sheet window中進行過程調用
調用的方法時同時按下shift和F
鍵
介紹 Microsoft Access Basic提供了一個豐富的開發環境
這個開發環境給你足夠的靈活性和對Microsoft Windows應用程序接口的控制
同時保護你使你免遭用高級或低級語言開發環境開發時所碰到的各種麻煩
不過
許多優化
有效數據和模塊化方面只能是應用程序設計者才能使用
開發者應致力於謹慎地使用算法
除了一般的程序設計概念
還有一些特別的存儲空間的管理技術
正確使用這些技術可以提高應用程序的執行速度
減少應用程序所要好的存儲資源
提高速度和減少代碼量
你可以用幾種技巧來提高你的編碼速度
但是卻找不到有效的算法的替代者
接下來的幾點建議可以提高你的編碼速度同時又減少你的應用程序消耗的存儲空間
使用整形數據類型進行數學運算
即使Microsoft Access 會使用一個聯合處理器來處理浮點型算術
整型數算術也總是要快一些
當你的計算不含有小數
盡量使用整型或長整型而不是變量或雙整型
整型除法同樣也要比浮點除法要快
在使用其他一些有效的數據類型時會警告
沒有任何東西可以替換有效的運算法則
避免使用過程調用
避免在循環體中使用子程序或函數調用
每一次調用都因額外的工作和時間而給編碼增大了負擔
每一次調用都要求把函數的局部變量和參數壓棧
而棧的大小是固定的
不能隨便加大
並且同時還要於Microsoft Access共享
謹慎使用不定長數據類型
不定長數據類型提供了更大的靈活性
比如說允許正確處理空值和自動處理溢出
另外這種數據類型比傳統的數據類型要大並消耗更多的存儲空間
前面還曾經提到過
不定長數據類型的變量在數學計算中比較慢
用變量存放經常使用的屬性
對變量進行查找和設置都比對屬性進行這些操作要快
如果你要得到或查閱一個屬性值許多次
那麼把這個屬性分配給一個變量
並用這個變量來代替屬性
那麼你的代碼將要運行快得多
例如
在一個循環中
你查閱某表格中得一個控制的屬性
那麼在循環外把屬性分配給一個變量
然後在循環中用查詢一個變量來代替查閱一個屬性的方法要比較快
預載表格
當你的應用程序啟動並且把它們的可見屬性設置位
false
時
如果你安裝了你所有的表格
那麼你的應用程序的性能會讓你感覺挺快
當你需要顯示一個表格時
你只需要把該表格的可見屬性設置為
true
這要比安裝一個表格要快得多
需要記住的是
為你安裝的每個表格
你都要從應用程序的全局堆中消耗存儲空間
Access Basic中的陷阱
在Access Basic中經常碰到的陷阱是對動態連接庫(DLLS)中的外部過程的調用
當你提供程序給你的用戶
調用外部動態鏈接庫時將出現使用警告
否則
你將得到一條錯誤信息
試圖用相同的函數定義安裝模塊
使用唯一的別名
在Access Basic中
如果你知道入口點(動態鏈接庫中函數的名字)
你可以調用動態鏈接庫中的外部函數
不過
使用這一方法的限制性在於你只能聲明外部函數一次
如果你安裝了調用了你的模塊調用的相同的Windows應用程序接口
你不會得到一個不為人所知的錯誤
試圖用相同的函數定義安裝模塊
你嘗試安裝的模塊要麼是包含有相同的函數名
要麼是包含在已存在的模塊中有的過程名
刪除這些過程
在EDIT菜單中使用FIND命令找到重復的過程名
要解決這一問題
你需要使用一種叫做
別名使用
的技術
這種技術允許你給你的過程一個獨一無二的名字
但是
你選擇的別名也有可能不是獨一無二的
所以要使你取的名字唯一
你可以用初始值和下劃線優先聲明你所有從動態鏈接庫中調用的過程
比如
聲明getActiveWindow為
Declare bcb_GetActiveWindow Lib
Kernel
Alias
GetActiveWindow
() As Integer
如何傳遞一個空指針給動態鏈接庫
一個空的
位指針是有效的或是為一些動態鏈接庫要求具有參數
要指定一個空值
使用
&
當你的函數調用一個過程並傳遞一個表達式
&
&
指定一個
位的空指針
在函數聲明中
一個AS ANY參數指示Access Basic對那個參數不進行類型檢查
同時把值傳遞到被調用的函數
下面的編碼示范了一個正確的方法
告訴你如何聲明一個給動態鏈接庫中的過程傳遞一個空指針參數的Access Basic函數
這段聲明了WriteProfileString應用程序接口函數
這個函數來自於外部Windows動態鏈接庫
kernel
Declare Function WriteProfileString Lib
Kernel
(ByVal lpApplicationName As Any
ByVal lpKeyName As Any
ByVal lpString As Any)
接下來的函數調用了一個外部過程
位每個參數指定一個空值
這將使WriteProfileString充滿它的內部高速緩沖區
並且WIN
INI的任何變化寫到磁盤上
重要的
對這個函數不正確的使用會引起一般性的保護故障或修改你的WIN
INI文件
Function nFlushIniCache()
nFlushIniCache = WriteProfileString (
&
&
&)
End Function
如何從動態鏈接庫中傳遞和接收無符號整型數
常常有這樣一種情況
要從外部動態鏈接庫調用的過程中返回一個兩個字節長的無符號整型數
然而Access Basic不支持這種數據類型
正確地計算這種數據類型需要把它從一個無符號整型數轉換程Access Basic長數據類型
Access Basic整型數的范圍使從
到
一個無符號整型數的范圍是從
到
Access Basic用最明顯的一位來放置數值的符號位
所以當數值超過
第
位將被置成負數符號
要計算一個無符號整型數
你必須人工調整第
位
從無符號整型數轉換到Access Basic長整型數或從Access Basic的長整型轉換成無符號整型數有兩種方法
第一種方法用到了最基本的數學運算(
被無符號整型值加或減)
第二種方法使用Bitwise操作
實際上
算術方法和Bitwise方法工作起來效果一樣
只不過
算術方法可能可讀性更強一些
而Bitwise方法在執行時可能更快一些
算術方法
下面的lArithUintToInt (nUint)和lArithIntToUnint(lBytes)過程示范了如何使用轉換無符號整型數的算術方法
第一個函數讀進一個無符號整型數同時返回一個已經轉變位長整型的值
第二個函數讀入一個長整型值
然後返回一個轉變成無符號整型的值
Function lArithUintToInt (nUint As Integer)
If nUint < 0 Then
lArithUintToInt = nUint + 65536
Else
lArithUintToInt = nUint
End If
End Function
Function nArithIntToUnint (lBytes As Long)
If lBytes >
Then
nArithIntToUnint = lBytes
Else
nArithIntToUnint = lBytes
End If
End Function
按位操作方法
下面的nBWUintToInt(lBytes) 和 lBWIntToUint(nUint)過程示范了如何使用Bitwise方法轉換無符號整型數
第一個函數讀進一個無符號整型數
然後返回一個已經轉換成長整型的值
第二個函數讀入一個長整型值
然後返回一個已經轉換的無符號整型值
第二個函數中使用了提示框的語句是為了防止當傳遞到函數的值大於
KB時會出現溢出信息
(
)
AND
(FFFF&)
(
)
The functions follow:
Function lBWIntToUint(nUint As Integer)
lBWIntToUint = nUint And &HFFFF&
End Function
Function nBWUintToInt(lBytes As Long)
Dim nTemp As Integer
If lBytes >
Then
MsgBox
You passed a value larger than
Exit Function
End If
nTemp = lBytes And &H
FFF
nBWUintToInt = nTemp Or
(lBytes And &H
)
End Function
注意
&HFFFF&要求
&
在
進制數的末尾
這樣能保證
位的
進制數通過
位的值表示出來
Access Basic中的技巧
在Microsoft Access 中有一些以前無正式文本的特性
它們允許你指定過程
這個過程是從一個from或report的屬性工作表窗中調用的
要進入最小窗口
只需要同時按下SHIFT和F
鍵
BUILDER FORM函數
如果在一個模塊中一個函數的定義是以
Builderr Form
開始同時包含一個類似於Onclose屬性或事件標識符
按下SHIFT和F
鍵就可以調用這個過程
例如
當你在一個form的設計窗口中
而當前的光標落在屬性窗口中的Onclose事件的編輯控制上
按下SHIFT和F
鍵將能調用BuilderFormOnclose函數
這使用於form和rep
From:http://tw.wingwit.com/Article/program/Oracle/201311/18202.html