<output id="os3gq"><ruby id="os3gq"></ruby></output>

    1. <mark id="os3gq"></mark>
    2. Access養生保健秘笈之反編譯大法-紅塵如煙
      Access軟件網QQ交流學習群(群號碼198465573),歡迎您的加入!
      首頁 >技術文章> 綜合其它


      Access養生保健秘笈之反編譯大法

      發表時間:2019/6/10 23:17:03 評論(3) 瀏覽(4018)  評論 | 加入收藏 | 復制
         
      摘 要:本文講解了如何解決使用Access開發的過程中,數據庫文件的各種異常及損壞問題。
      正 文:

      望聞問切:了解并收集問題現象

      大約是為了和 Office 其它組件統一,Access 有一個特色:它把所有對象和數據都放在同一個文件中。而不像其它開發工具,每個模塊都是一個或多個文件。


      因此當我們使用 Access 進行開發時,不可避免會對同一數據庫文件進行反復修改。


      但修改的次數一多,就會出現各種奇奇怪怪的問題。比如下面這些:



      注意!這些只是我當前能收集到的一些具有代表性的問題,而不是前面所說的奇奇怪怪的問題的全部!


      當遇到這些讓你摸不著頭的對話框時,實際上是 Access 在向你傳達了一個不幸的消息:很遺憾,你的數據庫文件出現了異;驌p壞,Access 無法正常進行工作。




      辨證施治:找出問題發生的原因和解決辦法


      Access 數據庫出現問題,最簡單的辦法自然就是壓縮修復了,但如果是出現前面所講的問題,壓縮修復基本不能解決問題。實際上仔細觀察上面的錯誤信息,可以粗略得出一個規律:都和修改 VBA 代碼有關。


      實際上對于數據對象(主要是表)的損壞,壓縮修復是很有用的手段。但對于作為客戶端使用的數據庫文件,絕大多數奇奇怪怪的問題都是由于編譯狀態異常造成的,而不少初學者寫代碼不夠仔細 ,會有一個不太好的習慣:過度依賴編譯功能來排錯。而過于頻繁地進行編譯,就會造成編譯異常不斷積累(VBA的編譯器比較爛的)。


      那么有什么辦法可以消除編譯狀態異常呢?這就要用到一個 Access 的命令行開關: 


      /decompile


      最常規的用法是,按 Win+R 組合鍵,打開運行對話框,然后輸入以下包含 /decompile 開關的命令行并回車運行:

      msaccess "D:\測試\Main.mdb" /decompile
           注意中間的文件路徑名,要改成你實際的文件路徑名。






      療效跟蹤:為什么仍然不能修復已損壞的數據庫文件?

      實際上 Access 數據庫文件的損壞,就和人生病一樣,根據病癥的的輕重程度不同,同樣的治療方法療效也不一樣。病情輕微時,可以很容易治好。而隨著病情加重,就越來越難以治好了。到最后可能就變成了:癌癥晚期,治不了,準備后事吧!



      如果出現本文開頭那些錯誤信息,說明文件損壞已經挺嚴重了!


      所以,解決 Access 由于編譯異常而造成的損壞,也和治病的思路一樣:預防為主,治療為輔。


      但這里有一個問題,由于 Access 的單文件特性,在出現明顯的錯誤之前,我們不知道是否存在編譯異常及文件損壞;即使出現了明顯的錯誤,有時候往往也無法判斷究竟是哪個或哪幾個對象的有問題。正如很多癌癥早期沒有任何癥狀,很難發現,當發現明顯癥狀時已經是晚期了。


      因此,最正確的用法是:不能把反編譯當成一個出現問題之后的治療手段,而是當成一個日常養生保健手段。


      當然事無絕對,在 Access 中,我們也不是完全沒有半點檢查手段。這里有一個檢測窗體(或其它對象)是否損壞的方法


      一般來說,越復雜的對象,越容易出問題。因此在 Access 中,最容易損壞的多半是比較復雜的窗體。


      我們可以先用 SaveAsText 方法將窗體另存為文本文件,再用 LoadFromText 方法將文件文件加載為窗體(自動替換已有窗體)。這2個步驟任何一個無法完成,就說明這個窗體有異;驌p壞。


      當然這個操作要一個一個窗體進行處理,就很繁瑣,最好是要自己寫一個循環代碼來處理。


      如果你使用盟威軟件快速開發平臺,那么可以打開 SysFrm_DevTool_ObjectRepair 窗體,這個是現成工具的,并且是開源的,直接使用即可。






      優化改進:怎么簡單方便地使用反編譯命令行?

      現在我們知道反編譯命令的好處,也知道了應該經常性地使用它。但每次都要打開“運行”對話框,然后輸入命令行,再回車打開文件,感覺好麻煩!怎么辦?


      這里本公子教大家一個進行反編譯最簡單方法使用VBS腳本來執行命令行。(呃,這個會不會違反了廣告法……P_P)


      假設數據庫文件名是 Main.mdb,新建一個文本文件,然后將其重命名為“反編譯打開Main.vbs”,右鍵點擊然后在快捷菜單中選擇“編輯”菜單項,用記事本打開它,打開后輸入以下代碼:

      strName = "Main.mdb"
      strPath = CreateObject("Scripting.FileSystemObject").GetFolder(".").Path & "\"
      CreateObject("WScript.Shell").Run "MSACCESS """ & strPath & strName & """ /decompile"
      








      然后我們每次打開 Main.mdb 的時候,不再直接雙擊Main.mdb 來打開,而是改為雙擊這個“反編譯打開Main.vbs”的腳本文件來打開。

      這樣沒有增加任何額外操作!是不是方便多了?





      注意事項:只是為了提醒你們不要馬虎

      1. 腳本中使用了相對路徑,因此 vbs 腳本文件必須和 Access 數據庫文件放在同一文件夾中。


      2. 腳本中第1行代碼指定的文件名,必須和要打開的數據庫文件名相同。






      復盤總結:前事不忘,后事之師。


      解決 Access 的各種異常及損壞,其實無非就是三板斧,別無它法:


      1. 反編譯

      2. 壓縮修復

      3. 導出所有對象到空的新建數據庫文件中


      但這些就像是武術中的基本招式,運用之妙,存乎一心!水平的體現,就是看你能不能把基本招式玩出花來。


      反編譯主要用于解決非數據異常損壞問題。

      壓縮修復主要用于解決數據異常損壞,當然非數據問題最好也壓縮修復一下。

      如果用了前面兩招,仍然有問題,那么就用導出所有對象到空的新建數據庫文件中這一招。


      少年,這本《懶得取名》神功中的秘傳心法本公子已經傳授給你了,能領悟多少,就看你的緣法了!學費十文錢,謝謝惠顧!


      (喂喂喂!什么叫《懶得取名》?!叫個《九陰真經療傷篇》之類有逼格的名字不行么。


      (哎呀!五毛特效都用不起的窮逼劇組,就不要在意那些細節了。


      最后的最后,再次強調一句:多備份!多備份!多備份!





      Access軟件網交流QQ群(群號:198465573)
       
       相關文章
      2種反編譯access數據庫的方法  【huangqinyong  2008/7/19】
      Access專家課堂  【麥田  2017/7/21】
      修復編譯后的accde文件“無法讀取數據庫中所含VBA工程”錯誤  【邵某某  2017/12/1】
      “子過程或函數未定義”解決方案詳解  【張志  2019/6/6】
       
       訪客評論
      2019/6/21一念一如來
      技藝還是高深的看不清來路,文字比5年前詼諧多了。

      2019/6/11lmqlt
      研發大系統階段,因反復啟動和修改程序,容易導致系統損壞,養成好的習慣可以防患于未然。主要方式:1、重要程序定期備份;2、發布前將Main.mdb內容導出一個新建的ACCESS文件中,使開發前的碎片減少,文件小了運行還快;3、正式發布時,將Main.mdb文件反編譯為mde格式,使用mde格式文件既安全又穩定。

      2019/6/10麥田

      總記錄:3篇  頁次:1/1 9 1 :
       
       發表評論
      評論內容 (必填)

      常見問答
      技術分類
      相關資源
      文章搜索
      關于作者

      紅塵如煙

      文章分類

      文章存檔

      友情鏈接
       
         
      湖北11选5