使用 VB.NET 程式碼壓縮及修復 Access 2007-2013 版本資料庫(.accdb)檔案

Compact and repair Access 2007-2013 database via Vb.net code

最近寫了一個小工具,資料庫使用 Access 2010 的檔案
而 Access 資料庫檔案的特性是檔案大小會持續增大,即使有執行 DELETE 語法
便決定寫一個 壓縮及修復資料庫 的功能,省去對 Office Access 的依賴

上 Google 查了一下,多數都是使用 Microsoft Jet and Replication Objects 2.6 Library 達來成
但是使用 JRO.JetEngine 時,透過 Jet OLEDB:Engine Type=? 指定目標檔案時
最高只能支援到 JET Version 4.x 也就是只能產出 Access 2003 版本檔案格式


後來嘗試使用
Microsoft DAO 3.6 Object Library 來處理
但是 DAO.DatabaseTypeEnum 這個陳述式中只能支援到 dbVersion40 也就是一樣只能到 Access 2003


最後找到了
Microsoft 14.0 Office Access database engine Object Library (版本12)
其中 Dao.DatabaseTypeEnum 最高支援到 dbVersion150 也就是 Access 2013

  • dbVersion120 : Access 2007
  • dbVersion140 : Access 2010
  • dbVersion150 : Access 2013

我電腦中版本的只能支援 Access 2013
有較新的版本應該就可以支援到 dbVersion160,也就是 Access 2016 和之後的版本

先上程式碼範例

參數1 和 參數2 是必須參數
參數3 選擇性:語系,大概是會影響到排序
參數4 選擇性:版本,範例是對應 Access 2010

 

參考:

 

設定 WebBrowser 控制項在執行階段模擬的 IE(Internet Explorer) 版本

Microsoft Virtual Studio 中的 WebBrowser 在使用上有蠻多的應用方式

然而有時候開啟某些網站時,卻會提示更換使用較新瀏覽器版本
即使已將 IE 更新的提示較新的版本,透過 WebBrowser 開啟依舊還是跳出提示,這點還真是讓人有點困擾

WebBrowser控制項 在執行階段中預設套用的IE版本,是系統上的註冊機碼定義的
這個註冊機碼的預設值會受到 安裝的系統、IE版本 和 .NET Framework 版本 所影響

閱讀全文〈設定 WebBrowser 控制項在執行階段模擬的 IE(Internet Explorer) 版本〉

VB.NET 跨執行緒作業無效,使用委派(Delegates)來解決

問題是這樣來了
鸚鵡在一個 Form 當中使用了一個自己寫的 Class Controller_A
Controller_A 再以多執行緒的方式用來控制其他的 Class Node_A, Class Node_B 到 Class Node_N

其中 Controller_A 會監聽 Node_N 的自定義事件,除了做各別處理外也會視需求觸發(RaiseEvent)自己的事件
Form 再監聽這些事件來控制 OvalShape 達到燈號的功能

但是當 Form 裡監聽事件的副程式嘗試變更 Form 上其他控制項時,就錯誤惹…

VB_NET例外(委派處理)
因為上一次使用 VB 來開發程式已經是 VB6.0時代了,所以只能慢慢爬官方文件
找到微軟 MSDN 關於 VB.NET 的委派(Delegates) 的相關說明,實在有點咬文嚼字讓我看了很久還是一樣看很不懂

爬文到最後自己好像有點懂了又還是不太懂 =.=
不過至少鸚鵡找到解決方法了

 

當 Ctrl_StatusChanged() 被 其他執行緒呼叫 或是 用來監聽其他執行緒觸發的事件 時會透過 Invoke() 委派的方式執行我們定義的委派 Ctrl_StatusChanged_CallBack()
然後直接跳出副程式

目前鸚鵡透過這樣的方式沒有在遇到 未處理的例外 了