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