熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Microsoft Access秘密、技巧和陷阱

2013-11-13 16:21:37  來源: Oracle 

  這篇文章概括了當使用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充滿它的內部高速緩沖區並且WININI的任何變化寫到磁盤上
  
  重要的
  
  對這個函數不正確的使用會引起一般性的保護故障或修改你的WININI文件
  
  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 &HFFF
  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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.