Microsoft Access資料庫引擎

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

目前的Access資料庫引擎最新版本為ACE 16。

Jet DLLs

<image>

Jet version｜Jet engine｜DLL file name｜MDB version 1.1｜1.10.0001｜MSAJT110.DLL｜1.0 / 1.1 2.0 （comlyr）｜2.00.0000｜MSAJT200.DLL｜1.0 / 1.1 / 2.0 2.5（accsvc）｜2.50.1606｜MSAJT200.DLL｜1.0 / 1.1 / 2.0 / 3.0 2.5（VB4 16）｜2.50.1606｜MSAJT200.DLL｜1.0 / 1.1 / 2.0 / 3.0 3.0｜3.0.0.2118｜MSJT3032.DLL｜1.0 / 1.1 / 2.0 / 3.0 3.5｜MSJET35.DLL｜1.0 / 1.1 / 2.0 / 3.0 4.0 (SP8)｜4.0.8015.0｜MSOLEDBJET40.DLL｜1.0 / 1.1 / 2.0 / 3.0 / 4.0 ACE 12｜12.0.xxxx.xxxx｜ACECORE.DLL｜1.0 / 1.1 / 2.0 / 3.X / 4.0 / ACE ACE 14｜14.0.xxxx.xxxx｜ACECORE.DLL｜3.X / 4.0 / ACE ACE 15｜15.0.xxxx.xxxx｜ACECORE.DLL｜4.0 / ACE ACE 16｜16.0.xxxx.xxxx｜ACEOLEDB.DLL｜4.0 / ACE Sources:、http://support.microsoft.com/kb/178880/en、http://support.microsoft.com/kb/282010/en、http://support.microsoft.com/kb/239114/en

應用程式/版本｜Jet version

Microsoft Access 1.0｜1.0

Microsoft Access 1.1｜1.1

Microsoft Access 2.0｜2.0

Microsoft Access 2.0 Service Pack｜2.5

Microsoft Access 95 / Excel 95｜3.0

Microsoft Access 97 / Excel 97 / PowerPoint 97 / Word 97｜3.5

Microsoft Access 2000｜4.0 SP1

Microsoft Access 2002

Microsoft Access 2003

Microsoft Access 2007｜ACE 12

Microsoft Access 2010｜ACE 14

Microsoft Access 2013｜ACE 15

Microsoft Access 2016｜ACE 16

Visual Basic 3.0｜1.1

Visual Basic Compatibility Layer｜2.0

Visual Basic 4.0 16-bit｜2.5

Visual Basic 4.0 32-bit｜3.0

Visual Basic 5.0｜3.5

Visual C++ 4.X｜3.0

Visual C++ 5.0｜3.5

Microsoft Project 4.1 / Project 95｜3.0

Internet Information Server 3.0｜3.5

SQL Server 7.0｜4.0

Redistributable installers

Jet 3.51 web download｜3.5+

MDAC 2.1｜4.0 SP1

MDAC 2.5｜4.0 SP3 to SP6+

Jet 4.0｜4.0 SP3 to SP8

2007 Office System Driver｜ACE 12

Microsoft Access Database Engine 2010｜ACE 14

Microsoft Access Database Engine 2016｜ACE 16

作業系統

Windows Me｜4.0 SP3

Windows 2000｜4.0 SP3

Windows XP｜4.0 SP5+

Windows Server 2003｜4.0 SP6+

Windows Vista｜4.0 SP8+

Windows Server 2008｜4.0 SP8+

Windows 7｜4.0 SP8+

- Microsoft Jet Database Engine Programmer's Guide - Introduction
- INFO: Identifying the Jet Database Engine Components
- Microsoft Data Access Components (MDAC) release history
- Release manifest for MDAC 2.1 (2.1.1.3711.11) (GA)
- INFO: MDAC Version 2.6 and Later Do Not Contain Jet or Desktop ODBC Drivers
- Release manifest for MDAC 2.5 Service Pack 3 (2.53.6200.2)
- Wrong Autonumber
- How to obtain the latest service pack for the Microsoft Jet 4.0 Database Engine

## 版本歷程

### 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，指示第一行不是標題，做為數據來使用。
- 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支援：

```csharp
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）

```csharp
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支援。

```csharp
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（輸出）。

```csharp
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

```csharp
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

```csharp
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=c:\myDB;
Extended Properties=dBASE IV;
```

### 文字檔案

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

```csharp
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提供支援。

```csharp
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 新的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的連線字串為：

```csharp
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=C:\myFolder\myAccess2007file.accdb;
Persist Security Info=False;
```

Excel 2007的連線字串為：

```csharp
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 位。