Microsoft Access數據庫引擎

Microsoft Access資料庫引擎（Microsoft Access Database Engine）是微軟針對檔案型資料庫所發展的資料庫引擎（Database Engine），它的前身Microsoft Jet資料庫引擎的適用資料來源種類相當多，像是Microsoft Access、Microsoft Excel、dBase等檔案型資料來源都可以使用SQL指令存取。
目前的Access資料庫引擎最新版本為ACE 16。

**版本歷程**

**Jet 1.0**
Microsoft Jet第一個版本是在1992年研發出來，當時的研發代號是「Cirrus」，為Microsoft Access 1.0所使用的資料庫引擎，當時的資料存取元件為DAO（Data Access Object），程式語言為Visual Basic 3.0，DAO本身是一個COM元件，可以由支援COM規格的程式語言所存取，但它當時的功能只適用於Microsoft Access。Jet 1.1於1993年5月發表，首次支援Access以外的資料庫 (FoxPro)。使用Dynaset保存查詢結果，它自動鏈接到數據庫，因此用戶可以查看Dynaset並即時看到別人對數據庫的修改；用戶修改Dynaset的記錄能自動存回數據庫，無需另寫修改數據庫內容的SQL語句。如果Dynaset是多表Join操作生成的，則是不可修改。

**Jet 2.x**
Jet 2.0在1994年4月與Access 2.0一起發表，它支援了數據完整性，引擎層次資料驗證，ANSI SQL，聯合查詢，子查詢等等功能，DAO也新增了更多完整的物件能力，像是集合、物件、屬性和方法等。同年的10月份，Jet 2.5與Access 2.0 Service Pack和ODBC Desktop Database Driver Kit一起發表，它也是第一個32位元版本的Jet引擎，並開始支援Excel的讀寫能力以及VBA的功能。

**Jet 3.x**
Jet 3.0在1995年第三季發表，Jet 3.5則是在1996年第三季發表，與Jet 2.x不同的是，它只有32位元的版本，提供給Windows 95以及Windows NT等作業系統使用，其主要新功能為支援資料庫複製（Replication），多執行緒支援以及動態緩衝區 (dynamic buffer)的能力，並使用全新的索引機制，可加快資料庫的速度，並且擴充DAO的物件模型。採用了Microsoft Rushmore查詢優化技術。Jet 3.0引入了隱式事務（Implicit transactions），即在上一條事務提交給數據庫後，自動開始了下一條事務。但隨後在Windows95平臺上發現這對性能有負面影響，Jet 3.5又刪除了這一特性。

**Jet 4.0**
Jet 4.0是Microsoft發表的最後一個Jet引擎版本，它支援了下列的能力：
#Unicode字元儲存支援，使用與Windows NT相同，並且也在Windows 95上版本實作的排序方法。
#變更資料型別，讓它更貼近SQL Server，並支援新的decimal資料型別。
#Memo欄位可以設定索引。
#可壓縮資料型別。
#強化SQL讓Jet更符合ANSI SQL-92規範。
#更好的安全性，檢視表支援，程序支援。支持SQL命令： CREATE, ADD, ALTER, DROP USER, DROP GROUP, GRANT/REVOKE.
#事務的提交與回滾。
#強化的表格建立與修改。
#支持引用完整性。
#連線控制。
#使用者清單，允許管理員能決定誰可連到資料庫。
#記錄層級鎖(record locking model )；此前版本只支援頁鎖，當時數據頁為2KB。都支持“悲觀鎖”（pessimistic locking）與樂觀鎖（optimistic locking），前者在請求鎖定時可立刻獲得鎖，後者在被編輯的記錄保存時才獲得鎖.
#與Microsoft SQL Server的雙邊複製能力。

**連接字符串與支援的資料庫**

**連接字符串**
參數HDR： HDR=Yes，指示第一行是標題，不做為數據使用；HDR=NO，指示第一行不是標題，做為數據來使用。
*參數IMEX ( IMport EXport mode )：
**0 表示Export mode，“匯出模式”，只能用來做“寫入”用途
**1 表示Import mode，“匯入模式”，只能用來做“讀取”用途。
**2 表示Linked mode (full update capabilities)，“鏈接模式”，可同時支援“讀取”與“寫入”用途
如果執行Insert Into語句時卻出現異常：“操作必須使用一個可更新的查詢”，這時可能需要把IMEX的值從2改為1嘗試。 

**Microsoft Access**
Access是Jet最主要的支援對象之一，因此對Access的支援是最充足的，依版本的不同，由MSRD2x40.DLL（Jet 2.x）、MSRD3x40.DLL (Jet 3.x)與MSJET40.DLL支援：
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\mydatabase.mdb;

**Microsoft Excel**
Excel則是在Jet 2.x開始支援的資料儲存體，雖然可以使用SELECT，INSERT，UPDATE三種查詢，但無法使用DELETE刪除資料，而且其SQL指令的使用限制也很多。
Excel的驅動程式由MSEXCL40.DLL提供，目前可支援：- Excel 3.0（Office 3.0）- Excel 4.0（Office 4.0）- Excel 5.0（Office 4.3）- Excel 8.0（Office 97-2000）
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\MyExcel.xls;
Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
對於Excel 97以上到2003版本在連接字符串中都用Excel 8.0；對於Excel 2007或2010的在連接字符串中都用Extended Properties=Excel 12.0

**Exchange**
Microsoft Jet支援Exchange 4.0資料庫，但後續版本即不再支援，目前它可存取Outlook 9.0 (Outlook 2000)的資料檔，由MSEXCH40.DLL支援。
Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;
MAPILEVEL=Outlook Address Book\;
PROFILE=Outlook;
TABLETYPE=1;
DATABASE=c:\temp

**HTML Table**
在網頁中的HTML表格可以利用Jet來存取，分為HTML import和HTML export兩個部份，分別處理HTML的SELECT（輸入）與INSERT（輸出）。
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=http://www.acme.com/tb.html;
Extended Properties="HTML Import;HDR=YES;IMEX=1";

**Paradox**
Jet可以連接與存取Paradox資料庫，由MSPBDE40.DLL支援，目前可用的版本有：- Paradox 3.x- Paradox 4.x- Paradox 5.x- Paradox 7.x
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Program Files\Microsoft Office\Office;
Extended Properties=Paradox 5.x

**dBase**
dBase檔案的支援由MSXBDE40.DLL支援，目前可用的版本有：- dBase III- dBase IV- dBase 5.0
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=c:\myDB;
Extended Properties=dBASE IV;

**文字檔案**
文字檔案 (text file)，包括csv文件，是Jet較為特殊的資料來源類型之一，它由MSTEXT40.DLL支援，它同時也是HTML Import與HTML Export的基礎。
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=c:\txtFilesFolder\data.txt;
Extended Properties="text;HDR=Yes;FMT=Delimited(,)";

**Lotus 1-2-3**
Lotus 1-2-3的試算表可由Jet存取，可支援Lotus的WJ2, WJ3, WK1, WK3與WK4等檔案格式，由MSLTUS40.DLL提供支援。
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\temp\FILE0014.WK4;
Extended Properties=Lotus WK4;
Persist Security Info=False

**對於Microsoft Office 2007的支援**
由於Microsoft Office 2007對其旗下Access與Excel的主要檔案格式進行修改，並且重新命名為.accdb（Access 2007資料庫檔案）與.xlsx（Excel 2007檔案），因此不再被Microsoft Jet引擎支援，不過微軟也隨著OFFICE 2007產品發佈了 Microsoft Office 2007 Desktop Drivers: Data Connectivity Components date=20100527092013 新的Office相關版本（Office-specific version）的Jet數據庫引擎：Office Access Connectivity Engine (ACE)，其連接字串中的資料提供者改為Microsoft.ACE.OLEDB.12.0。ACE引擎向後兼容於老版本的Jet引擎，但是對Jet 4.0的一些重要特性不再支持，包括：用戶級安全（User-level security）與複製特性（replication feature）。Access 2007及其後版本使用Jet 4.0引擎來操作老版本的Access文件。 Microsoft Access 2010引入了64比特版本的ACE引擎。
Access 2007的連線字串為：
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=C:\myFolder\myAccess2007file.accdb;
Persist Security Info=False;
Excel 2007的連線字串為：
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";
對 x64 的支持能力隨 Office 安裝版本而定：若 Office 安裝了 x86 版本，則沒有 64 位 ODBC 驅動程序可用（Jet 和 Office 驅動都是 32 位）；但若安裝了 x64 版本的 Office，則 32 位的 ODBC 程序只能使用 Windows 附帶的 Jet 驅動程序、Office 驅動程序是 64 位。

**參考資料 ==