Microsoft_Jet_Database_Engine

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

目前的 Jet 引擎最新版本為 4.0，並且未來在 x64 平台上將不再支援。

## 版本歷程

### 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 引擎版本，它支援了下列的能力：

1. Unicode 字元儲存支援，使用與 Windows NT 相同，並且也在 Windows 95 上版本實作的排序方法。
2. 變更資料型別，讓它更貼近 SQL Server，並支援新的 decimal 資料型別。
3. Memo 欄位可以設定索引。
4. 可壓縮資料型別。
5. 強化 SQL 讓 Jet 更符合 ANSI SQL-92 規範。
6. 更好的安全性，檢視表支援，程式支援。支援 SQL 命令： CREATE, ADD, ALTER, DROP USER, DROP GROUP, GRANT/REVOKE.
7. 事務的提交與回滾。
8. 強化的表格建立與修改。
9. 支援參照完整性。
10. 連線控制。
11. 使用者清單，允許管理員能決定誰可連到資料庫。
12. 記錄層級鎖 (record locking model)；此前版本只支援頁鎖，當時資料頁為 2KB。都支援「悲觀鎖」（pessimistic locking）與樂觀鎖（optimistic locking），前者在請求鎖定時可立刻獲得鎖，後者在被編輯的記錄儲存時才獲得鎖.
13. 與 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 支援：

### 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）

對於 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 支援。

### HTML Table

在網頁中的 HTML 表格可以利用 Jet 來存取，分為 HTML import 和 HTML export 兩個部份，分別處理 HTML 的 SELECT（輸入）與 INSERT（輸出）。

### Paradox

Jet 可以連接與存取 Paradox 資料庫，由 MSPBDE40.DLL 支援，目前可用的版本有：

* Paradox 3.x
* Paradox 4.x
* Paradox 5.x
* Paradox 7.x

### dBase

dBase 檔案的支援由 MSXBDE40.DLL 支援，目前可用的版本有：

* dBase III
* dBase IV
* dBase 5.0

### 文字檔案

文字檔案 (text file)，包括 csv 檔案，是 Jet 較為特殊的資料來源類型之一，它由 MSTEXT40.DLL 支援，它同時也是 HTML Import 與 HTML Export 的基礎。

### Lotus 1-2-3

Lotus 1-2-3 的試算表可由 Jet 存取，可支援 Lotus 的 WJ2, WJ3, WK1, WK3 與 WK4 等檔案格式，由 MSLTUS40.DLL 提供支援。

## 對於 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 （頁面存檔備份，存於網際網路檔案館）新的 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 的連線字串為：

Excel 2007 的連線字串為：

對 x64 的支援能力隨 Office 安裝版本而定：若 Office 安裝了 x86 版本，則沒有 64 位 ODBC 驅動程式可用（Jet 和 Office 驅動都是 32 位）；但若安裝了 x64 版本的 Office，則 32 位的 ODBC 程式只能使用 Windows 附帶的 Jet 驅動程式、Office 驅動程式是 64 位。

## 參考資料