Copyright: Built on   Wed Dec 11 16:17:29 1996


ALTER TABLE 语句

修改已用 CREATE TABLE 语句创建好的表设计。

注意   Microsoft Jet 数据库引擎并不支持使用 ALTER TABLE，或任何非 Microsoft Jet 数据库数据定义语言 (DDL) 语句。而由 DAO Create 方法取代。

语法

ALTER TABLE table {ADD {COLUMN field type[(size)] [NOT NULL] [CONSTRAINT index] |
CONSTRAINT multifieldindex} |
DROP {COLUMN field I CONSTRAINT indexname} }

ALTER TABLE 语句分为以下几个部分：

部分	说明
table	欲修改的表之名称。
field	欲在表内增加或删除的字段的名称。
type	字段的数据类型。
size	字段的字符长度 (仅文本字段及二进制字段)。
index	字段索引。关于如何构造字段索引的详细信息，请参阅 CONSTRAINT 子句主题。
multifieldindex	欲增加至表 中的多重字段索引的定义。关于如何构造此子句的详细信息，请参阅 CONSTRAINT 子句主题。
indexname	欲删除的多重字段索引的名称。
说明

使用 ALTER TABLE 语句，可用多种不同方法更改当前已存在的表：

•	使用 ADD COLUMN 在表中添加新的字段。需要指定字段名、数据类型、还可以 (对文本和二进制字段)指定长度。 例如，下列语句在员工表中增加一 25 个字符的、名为 Notes 的文本字段：

ALTER TABLE Employees ADD COLUMN Notes TEXT(25)

也可以定义此字段的索引。关于单一字段索引的详细信息，请参阅CONSTRAINT 子句主题。

如果对一字段指定 NOT NULL，则在这字段中添加的新记录必须有有效的数据。

•	使用 ADD CONSTRAINT 添加多重字段索引。关于多重字段索引的详细信息，请参阅 CONSTRAINT 子句主题。

•	使用 DROP COLUMN 删除字段。只要指定欲删除的字段名即可。

•	使用 DROP CONSTRAINT 删除多重字段索引。只要在 CONSTRAINT 保留字后面指定索引名即可。

注意

•	不能同时添加或删除一个以上的字段或索引。

•	可以使用 CREATE INDEX 语句添加单一或多重字段索引至一表，也可以用 ALTER TABLE 或 DROP语句来删除用 ALTER TABLE 或 CREATE INDEX 创建的索引。

•	可以在单一字段上使用 NOT NULL，或在名为 CONSTRAINT 的子句中使用 NOT NULL，这个名为 CONSTRAINT 的子句应用于单一字段或名为 CONSTRAINT 的多重字段。不管怎样，只能在一字段上使用 NOT NULL 一次，否则将发生执行时的错误。


CONSTRAINT 子句

constraint 子句与索引 颇为相似，但它还能用来建立与另一表之间的关系。

在 ALTER TABLE 语句及 CREATE TABLE 语句 中使用 CONSTRAINT 子句来创建或删除条件。CONSTRAINT 子句可分为两种类型：第一种是在单一字段上创建条件；第二种是在一个以上的字段上创建条件。

注意   Microsoft Jet database 数据库引擎并不支持使用 CONSTRAINT ，或任何非 Microsoft JET 数据库的数据定义语言 (DDL) 语句。

而由 DAO Create 方法取代。

语法

单一字段条件：

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]}

多重字段条件：

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]}

CONSTRAINT 子句可分为以下几个部分：

部分	说明
name	欲创建的条件的名称。
primary1, primary2	欲设计成为主键的一个或多个字段的名称。
unique1, unique2	欲设计成为唯一键的一个或多个字段之名称。
notnull1, notnull2	被限制为非 Null 值的字段的名称。
ref1, ref2	引用另一个表的字段的外部键字段的名称。
foreigntable	包含了由 foreignfield 指定的字段的外部表的名称。
foreignfield1, foreignfield2	由 ref1、ref2 指定的 foreigntable 中的字段的名称。如果引用的字段是 foreigntable 的主键，则可省略此子句。
说明

紧接在字段的数据类型规格之后，在 ALTER TABLE 或 CREATE TABLE 语句的字段定义子句中，使用单一字段条件之语法。

只要在 ALTER TABLE 或 CREATE TABLE 语句的字段定义子句之外使用保留字 CONSTRAINT，就可以使用多重字段条件之语法。

使用 CONSTRAINT，可以将字段设计为如下的条件类型之一：

•	可以使用 UNIQUE 保留字将字段设计为唯一键。这意味着在同一个表中没有两个记录的这个字段的值是相同的。可以强制任何字段或字段列表为唯一的。如果多重字段条件被设计成唯一键，在索引之中的所有字段的组合值必须也是唯一的，即使在这些字段之中有两个或两个以上的记录有相同的值。

•	可以用 PRIMARY KEY 保留字，将表中的字段或一组字段设计为主键。在主键之中所有的值必须是唯一的，且不可为 Null，一个表只能有一个主键。

注意   在一个已经设有主键的表中，不能再设置 PRIMARY KEY 条件，否则会发生错误。

•	您可以使用 FOREIGN KEY 保留字将一个字段设置为外部键。如果外部表的主键是由一个以上的字段所组成，则必须使用多重字段条件定义，列出全部的引用字段、外部表名、以及以列出引用字段相同的顺序在外部表中列出引用字段的名称。如果引用的字段是外部表的主键，就按缺省规定，不需再指定引用字段，如果外部表的主键是引用字段，数据库引擎便打开。


CREATE INDEX 语句

在现有的表上创建新的索引。

注意   对于非 Microsoft JET 数据库，Microsoft Jet 数据库引擎不支持使用 CREATE INDEX (除了在 ODBC 链接表上创建虚拟索引)或任何的数据定义语言 (DDL) 语句。请使用 DAO 创建方法。更详细的信息，请参阅说明部分。

语法

CREATE [ UNIQUE ] INDEX index
ON table (field [ASC|DESC][, field [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

CREATE INDEX 语句可分为以下几个部分：

部分	说明
index	欲创建的索引的名称。
table	将包含该索引的现存表的名称。
field	欲被索引的字段的名称。要创建单一字段索引，在表名称后面的括号中列出字段名。要创建多重字段索引，列出包括在索引中的每一个字段的名称。如果索引为递减排序，使用 DESC 保留字；否则，索引总是递增排序。
说明

在不同记录的索引字段之中不允许有重复值时，请使用 UNIQUE 保留字。

在可选的 WITH 子句中，可以强制数据有效性规则：

•	通过使用 DISALLOW NULL 选项来禁止在新记录的索引字段中使用 Null 项。

•	通过使用 IGNORE NULL 选项，避免在索引中包含索引字段为 Null 值的记录。

•	用 PRIMARY 保留字将索引字段设计为主键。这里隐喻此键是唯一的，所以可以省略 UNIQUE 保留字。

可在 ODBC 数据源中的链接表上用 CREATE INDEX 创建虚拟索引，例如 SQL 服务器，还不具备索引。不需要权限或访问远程服务器来创建虚拟索引，且远程数据库并不会察觉到虚拟索引也不受虚拟索引的影响。对于由外部链接之表和数据库内部之表皆可使用相同的语法。此种方法有助于创建表的索引，该表通常由于缺少索引所以为只读的。

您也可以使用 ALTER TABLE 语句 在表中添加单一或多重字段索引，也可以使用 ALTER TABLE 语句或 DROP 语句 删除用 ALTER TABLE 或 CREATE INDEX 创建的索引。

注意   在已经具有主键的表上创建新索引时，不得使用 PRIMARY 保留字；否则，会发生错误。


CREATE TABLE 语句

创建新表。

注意    Microsoft Jet 数据库引擎不支持使用 CREATE TABLE，或任何非 Microsoft JET 数据库的 DDL 语句。而使用 DAO创建方法。

语法

CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]])

CREATE TABLE 语句分为以下几个部分：

部分	说明
table	欲创建的表的名称。
field1, field2	在新表中欲创建的字段的名称。至少必须创建一个字段。
type	在新表中的字段的数据类型。
size	字段的字符长度 (文本及二进制字段)。
index1, index2	定义单一字段索引的 CONSTRAINT 子句。关于如何创建此索引的详细信息，请参阅 CONSTRAINT 子句主题。
multifieldindex	子句定义多重字段索引的 CONSTRAINT 。关于如何创建此索引的详细信息，请参阅 CONSTRAINT 子句主题。
说明

使用 CREATE TABLE 语句来定义新表及它的字段以及字段条件。如果将一字段指定为 NOT NULL，则新记录的该字段值必须是有效的数据。

CONSTRAINT 子句在字段上可创建不同的限制，并可用来建立主键。还可用 CREATE INDEX 语句在现有的表上创建主键或附加索引。

可以在单一字段上使用 NOT NULL，或在用于单一字段或多重字段(名为 CONSTRAINT) 的 CONSTRAINT 子句中使用 NOT NULL。但是，在一字段上只能使用 NOT NULL 一次，否则将发生运行时错误。


DROP 语句

从数据库中删除已存在的表，或从表中删除已存在的索引。

注意   Microsoft Jet 数据库引擎不支持使用 DROP，或任何非 Microsoft JET 数据库的 DDL 语句。而使用 DAO Delete 方法。

语法

DROP {TABLE table | INDEX index ON table}

这 DROP 语句分为以下几个部分：

部分	说明
table	欲删除的表的名称，或欲删除的索引所在的表的名称。
index	欲从表中删除的索引的名称。
说明

必须先关闭表，然后才能删除此表或此表中的索引。

也可以使用 ALTER TABLE 语句 来删除表中的索引。

可以使用 CREATE TABLE 语句 创建表，使用 CREATE INDEX 语句 或 ALTER TABLE 创建索引。使用 ALTER TABLE修改表。


SELECT 语句

指示 Microsoft Jet 数据库引擎返回数据库中的信息，此时将数据库看作记录的集合。

语法

SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

SELECT 语句具有以下几个部分：

部分	描述
predicate	下列谓词之一：ALL、DISTINCT、DISTINCTROW 或TOP。您可用谓词来限制返回的记录数量。如果没有指定谓词，则默认值为 ALL。
*	从特定的表中指定全部字段。
Table	表的名称，此表中包含已被选择的记录的字段。
field1, field2	字段的名称，该字段包含了您要获取的数据。如果数据包含多个字段，则按列举顺序依次获取它们。
alias1, alias2	名称，用来作列标头，以代替 table.中原有的列名。
tableexpression	表的名称，这些表包含要获取的数据。
externaldatabase	数据库的名称，该数据库包含 tableexpression 中的表，如果这些表不在当前数据库中的话。
说明

为完成此运算，Microsoft Jet 数据库引擎会搜索指定的表，抽出所选择的列，并选择满足条件的行，并按指定的顺序对选出的行排序，或将它们分组。

SELECT 语句不会更改数据库的中的数据。

SELECT 通常是 SQL 语句中第一个词。大部分 SQL 语句或者是 SELECT 语句，或者是 SELECT...INTO 语句。

SELECT 语句的最短的语法是：

SELECT fields FROM table

可用星号 (*) 从表中选择全部字段。下例选择了雇员表中的全部字段：

SELECT * FROM Employees;

如果 FROM 子句中有多个表包含字段名，则字段之前为表名称和 . （点）操作符。在以下示例中，「部门」字段将出现在雇员表及超级用户表中。SQL 语句将从雇员表和超级用户表来选择部门：

SELECT Employees.Department, Supervisors.SupvName

FROM Employees INNER JOIN Supervisors

WHERE Employees.Department = Supervisors.Department;

当 Recordset 对象时，Microsoft Jet 数据库引擎将在 Recordset 对象中用表的字段名作为 Field 对象的名称。如果想要一个不同的字段名，或想要一个不是由生成字段的表达式导出的名，则使用 AS 保留字。在下例所得到的 Recordset 对象中用 Birth 标题将返回的 Field 对象命名：

SELECT BirthDate

AS Birth FROM Employees;

无论何时使用合计函数或查询，而且该查询返回含糊的或重复的 Field 对象名称，都必须用 AS 子句来提供 Field 对象的替代名称。在以下示例所得到的 Recordset 对象中用 HeadCount 标题将返回的 Field 对象命名：

SELECT COUNT(EmployeeID)

AS HeadCount FROM Employees;

可使用 SELECT 语句中的其它子句进一步限制和组织已返回的数据。若需更多信息，参见所用子句的主题帮助。


FROM 子句

指定表或查询，该表或查询包含 SELECT 语句中列举的字段。

语法

SELECT fieldlist
FROM tableexpression [IN externaldatabase]

包含 FROM 子句的 SELECT 语句具有以下几个部分：

部分	描述
fieldlist	字段名，同任何字段名的别名、SQL 合计函数、选择谓词（ALL、DISTINCT、DISTINCTROW或 TOP）或其它 SELECT 语句选项一起被获取。
tableexpression	标识一个或多个表的表达式，而且从这些表中来获取数据。此表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。
Externaldatabase	外部数据库的整个路径，此数据库包含 tableexpression 中的所有表。
说明

任何 SELECT 语句都需要 FROM ，而且， FROM 紧接在 SELECT 语句之后。

在 tableexpression 中，表名称的顺序并不重要。

为改善性能并方便使用，在从外部数据库获取数据时，推荐使用链接表而不使用 IN 子句。

下例显示如何从雇员表中获取数据：

SELECT LastName, FirstName

FROM Employees;


IN 子句

标识任何外部数据库中的表，Microsoft Jet 数据库引擎可连接到这些数据库上，例如 dBASE 、 Paradox 数据库或外部 Microsoft Jet 数据库。

语法

标识目标表：

[SELECT | INSERT] INTO destination IN
{path | ["path" "type"] | ["" [type; DATABASE = path]]}

标识数据源表：

FROM tableexpression IN
{path | ["path" "type"] | ["" [type; DATABASE = path]]}

包含 IN 子句的SELECT 语句具有以下几个部分：

部分	描述
destination	外部表的名称，将数据插入表中。
tableexpression	表的名称，可从这些表中获取数据。此参数可为单一表的名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN得到的复合结果。
Path	目录或文件的整个路径，而且这些目录或文件包含 table  。
type	数据库类型的名称，如果数据库不是 Microsoft Jet 数据库（例如 dBASE III、dBASE IV、Paradox 3.x或Paradox 4.x），则用此类型创建 table 。
说明

用 IN 子句一次只能连接一个外部数据库。

在某些情况中，path 参数可引用包含数据库文件的目录。例如，当使用 dBASE、FoxPro或 Paradox 数据库表时，path 参数将指定包含 .dbf 或 .db 文件的目录。由 destination 或 tableexpression 参数可得到表文件的名称。

为了指定非 Microsoft JET 数据库，可在名称之后附加分号 (;)，并用单引号 (' ') 或 (" ") 双引号将它括入。例如可用 'dBASE IV;' 或 "dBASE IV;"这两种写法。

也可使用 DATABASE 保留字指定外部数据库。例如，以下示例指定相同的表：

... FROM Table IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];

... FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;"

注意

•	为改进性能并方便使用，请使用链接表 而不要用 IN。

•	在表达式中也可用 IN 保留字作为比较操作符。若需更多有关信息，参见 In 操作符。


WHERE 子句

在 FROM 子句列举的表中指定SELECT、UPDATE或DELETE 语句所影响的记录。

语法

SELECT fieldlist
FROM tableexpression
WHERE criteria

包含 WHERE 子句的SELECT 语句具有以下几个部分：

部分	描述
fieldlist	字段名，同任何字段名的别名、选择谓词（ALL、DISTINCT、DISTINCTROW或 TOP）或其它 SELECT 语句选项一起被获取。
tableexpression	表的名称，可从这些表中获取数据。
criteria	一个表达式，记录必须满足此表达式，从而使查询结果包含这些记录。
说明

Microsoft Jet 数据库引擎将选择满足 WHERE 子句所列举条件的记录。如果未指定 WHERE 子句，则查询将返回表中的所有行。如果在查询中指定了多个表且尚未包含 WHERE 子句或 JOIN 子句，则查询会生成表的笛卡儿积。

WHERE 是可选的，但在使用时必须接在 FROM 之后。例如，可在销售部门选择全部雇员（WHERE Dept = 'Sales'）或年龄在 18 岁 至 30 岁之间（WHERE Age Between 18 And 30）的全部客户。

如果未在多重表中使用 JOIN 子句完成 SQL 联结运算，则不能更新所得到的 Recordset 对象。

WHERE 与 HAVING 相类似。WHERE 决定应选择哪个记录。与此相似，一旦用 GROUP BY 将记录分组，则 HAVING 将决定显示哪个记录。

使用 WHERE 子句可消除您不想用 GROUP BY 子句进行分组的记录。

用多种不同的表达式来确定 SQL 语句将返回哪些字段。例如，下行 SQL 语句将选择薪金超过 $21,000 的所有雇员：

SELECT LastName, Salary

FROM Employees

WHERE Salary > 21000;

WHERE 子句最多可包含 40 个表达式，这些表达式由诸如 And 和 Or 之类的逻辑操作符链接。

当您输入的字段名包含空格或标点符号时，请用括号 ([ ]) 将它括在其中。例如，一个客户信息表可能包含有关特定客户的信息：

SELECT [Customer's Favorite Restarant]

当您指定 criteria 参数时，即使没有使用 U.S. 版本的 Microsoft Jet 数据库引擎，也必须用 U.S. 格式表示日期文字。例如，在英国将 May 10, 1996 写成 10/5/96，而在美国却写成 5/10/96。必须确保将日期文字与数字符号 (#) 括起来，如下例所示。

为在英国的数据库中查找日期为 May 10, 1996 的记录，必须使用下列 SQL 语句：

SELECT *

FROM Orders

WHERE ShippedDate = #5/10/96#;

也可使用 DateValue 函数，这是 Microsoft Windows 建立的国际标准设置值。例如，在美国这样使用此代码：

SELECT *

FROM Orders

WHERE ShippedDate = DateValue('5/10/96');

而在英国这样使用此代码：

SELECT *

FROM Orders

WHERE ShippedDate = DateValue('10/5/96');

注意   如果准则字符串中引用的列为 GUID类型，则准则表达式将使用稍有不同的语法：

WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}

必须确保将以上所示嵌套大括弧和连字符都包括在内。


GROUP BY 子句

将记录与指定字段中的相等值组合成单一记录。如果 SELECT 语句包含 SQL 合计函数，比如 Sum 或 Count，则每一笔记录都会给出一个总计值。

语法

SELECT fieldlist
FROM table
WHERE criteria
[GROUP BY groupfieldlist]

包含 GROUP BY 子句的 SELECT 语句具有以下几个部分：

部分	描述
fieldlist	字段名，同任何字段名的别名、SQL 合计函数、选择谓词（ALL、DISTINCT、DISTINCTROW 或 TOP）或其它 SELECT 语句选项一起被获取。
table	从其中获取数据的表的名称。若需更多相关信息，参见 FROM 子句。
criteria	选择准则。如果语句包含WHERE 子句，则Microsoft Jet 数据库引擎在对记录应用 WHERE 条件后会将这些值分组。
groupfieldlist	用以将记录分组的字段名，最多为 10 个字段。 groupfieldlist 中字段名的顺序决定组层次，由分组的最高层次至最低层次。
说明

GROUP BY 是可选的。

如果在 SELECT 语句中没有 SQL 合计函数，则可省略总计值。

GROUP BY 字段中的 Null 值已被分组但不能被省略。但是在任何 SQL 合计函数中不计算 Null 值。

使用 WHERE 子句可以排除您不想分组的行，而将记录分组后，用 HAVING 子句过滤这些记录。

除非包含备注数据或 OLE 对象数据，否则， GROUP BY 字段列表中的字段可引用 FROM 子句中的任何表的任何字段，即使 SELECT 语句不包含此字段，只要它至少包含一个 SQL 合计函数即可。Microsoft Jet 数据库引擎不能对备注或 OLE 对象字段分组。

 SELECT 字段列表中的全部字段必须包含在 GROUP BY 子句中，或在 SQL 合计函数中作为参数。


HAVING 子句

在 SELECT 语句中指定，显示哪些已用 GROUP BY 子句分组的记录。在 GROUP BY 组合这些记录后，HAVING 将显示那些经 GROUP BY 子句分组并满足 HAVING 子句中条件的记录。

语法

SELECT fieldlist
FROM table
WHERE selectcriteria
GROUP BY groupfieldlist
[HAVING groupcriteria]

包含 HAVING 子句的 SELECT 语句具有以下几个部分：

部分	描述
fieldlist	字段名，同任何字段名的别名、SQL 合计函数、选择谓词（ALL、DISTINCT、DISTINCTROW或 TOP）或其它 SELECT 语句选项一起被获取。
table	从其中获取数据的表的名称。若需更多有关信息，参见 FROM 子句。
selectcriteria	选择准则。如果语句包含一个 WHERE 子句，Microsoft Jet 数据库引擎在应用 WHERE 条件的后，会将这些值分组。
groupfieldlist	用来对记录分组的字段名，最多有 10 个字段。在 groupfieldlist 中字段名的顺序将决定组层次，由最高至最低的层次来分组。
groupcriteria	一个表达式，用以决定应显示的已分组记录。
说明

HAVING 是可选的。

HAVING 与 WHERE 类似，可用来决定选择哪个记录。在使用 GROUP BY对这些记录分组后，HAVING 会决定应显示的记录：

SELECT CategoryID,

Sum(UnitsInStock)

FROM Products

GROUP BY CategoryID

HAVING Sum(UnitsInStock) > 100 And Like "BOS*";

一个 HAVING 子句最多可包含 40 个表达式，并由诸如 And 及 Or 之类的逻辑操作符来链接这些表达式。


ORDER BY 子句

按照递增或递减顺序在指定字段中对查询的结果记录进行排序。

语法

SELECT fieldlist
FROM table
WHERE selectcriteria
[ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]]

包含 ORDER BY 子句的 SELECT 语句具有以下几个部分：

部分	描述
fieldlist	字段名，同任何字段名的别名、SQL 合计函数、选择谓词（ALL、DISTINCT、DISTINCTROW或 TOP）或其它 SELECT 语句选项一起被获取。
table	从其中获取数据的表的名称。若需更多有关信息，参见 FROM 子句。
selectcriteria	选择准则。如果语句包含一个 WHERE 子句，Microsoft Jet 数据库引擎在应用 WHERE 条件的后会为这些值排序。
field1, field2	要排序记录的字段名。
说明

ORDER BY 是可选的。不过，如果要将数据以排序时的顺序显示出来，就必须使用 ORDER BY。

缺省的排序次序是递增排序 （A 至 Z，0 至9）。以下两个示例都用雇员的姓对雇员姓名排序：

SELECT LastName, FirstName

FROM Employees

ORDER BY LastName;

SELECT LastName, FirstName

FROM Employees

ORDER BY LastName ASC;

为按递减顺序排序（Z 至 A，9 至0），必须将 DESC 保留字添加到要递减排序的每一字段的尾部。下例选择雇员薪金并对雇员用递减顺序排序。

SELECT LastName, Salary

FROM Employees

ORDER BY Salary DESC, LastName;

如果在 ORDER BY 子句指定一个包含备注数据或 OLE 对象数据的字段，就会发生错误。Microsoft Jet 数据库引擎不对这些类型的字段排序。

在 SQL 语句中， ORDER BY 通常是最后项目。

ORDER BY 子句可包含添加的字段。首先用 ORDER BY之后列举的第一个字段对记录排序。然后对此字段中等值的记录用第二字段列举的值进行排序，依此类推。


ALL、DISTINCT、DISTINCTROW、TOP 谓词

指定使用 SQL 查询所选择的记录。

语法

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM table

包含这些谓词的 SELECT 语句可分为下列几部分：

部分	描述
ALL	如果不包含任何一个谓词，则取此值。Microsoft Jet 数据库引擎将选择符合 SQL 语句中条件的全部记录。下列两示例是等价的，并且都返回雇员表的所有记录： SELECT ALL * FROM Employees ORDER BY EmployeeID; SELECT * FROM Employees ORDER BY EmployeeID;
DISTINCT	省略选择字段中包含重复数据的记录。为了让查询结果包含它们，必须使 SELECT 语句中列举的每个字段值是唯一的。例如，雇员表可能有一些同姓的雇员。如果有两个记录的姓氏字段皆包含 Smith，则下列 SQL 语句只返回包含 Smith 的记录： SELECT DISTINCT LastName FROM Employees; 如果省略 DISTINCT，则查询将返回两个包含 Smith 的记录。 如果 SELECT 子句包含多个字段，则对已给记录，所有字段值的组合必须是唯一的，而且结果中将包含这一组合。 如果查询使用 DISTINCT，则不能更新其输出，而且该输出也不会反映其它用户所作的一系列更改。
DISTINCTROW	省略基于整个重复记录的数据，而不只是基于重复字段的数据。例如，可在客户ID字段上创建一个联结客户表及订单表的查询。客户表不包含重复的客户ID字段，但订单表却包含重复的客户ID字段，因为每一客户可以有许多订单，所以包含有重复的字段。下列 SQL 语句显示如何使用 DISTINCTROW 生成公司的列表，且该列表至少包含一个订单，但不包含有关那些订单的任何详细数据： SELECT DISTINCTROW CompanyName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY CompanyName; 如果省略 DISTINCTROW，则查询将对每一公司生成多重行，且该公司包含多个订单。 仅当从查询中的一部分表但不是全部表中选择字段时，DISTINCTROW 才会有效。如果查询只包含一个表，或者从所有的表中输出字段，则可省略DISTINCTROW。
TOP n [PERCENT]	返回特定数目的记录，且这些记录将落在由 ORDER BY 子句指定的前面或后面的范围中。假设您想要 1994 年班级里的前 25 个学生名字： SELECT TOP 25 FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage DESC; 如果您没有包含 ORDER BY 子句，则查询将由学生表返回 25 个记录的任意集合，且该表满足 WHERE 子句。 TOP 谓词不在相同值间作选择。在前一示例中，如果第 25 及第 26 的最高平均分数相同，则查询将返回 26 个记录。 也可用 PERCENT 保留字返回特定记录的百分比，且这些记录将落在由 ORDER BY 子句指定的前面或后面范围中。假设用班级后面 10% 的学生代替前 25 个学生，： SELECT TOP 10 PERCENT FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage ASC; ASC 谓词指定返回后面的值。且接在 TOP之后的值必须是无符号的整型值。 查询是否可更新，这不会受到 TOP 的影响。
table	从其中获取记录的表的名称。


DELETE 语句
_DELETE 语句

创建一个删除查询，可从列在 FROM 子句之中的一个或多个表中删除记录，且该子句满足 WHERE 子句中的条件。

语法

DELETE [table.*]
FROM table
WHERE criteria

DELETE 语句可分为以下几个部分：

部分	描述
table	从其中删除记录的表的可选名称。
table	从其中删除记录的表的名称。
criteria	决定哪些记录应该被删除的表达式。
说明

可以使用 DELETE 删除多个记录。

可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过，若用这种方法删除表，将会失去表的结构。不同的是当使用 DELETE，只有数据会被删除；表的结构以及表的所有属性仍然保留，例如字段属性及索引。

可以使用 DELETE 从表中删除记录，且该表与其他表有一对多关系。若在一个查询中删除了关系中‘一’的一方的表的相应记录，级联删除操作将删除关系中‘多’的一方的表的记录。例如，在客户表与订单表之间的关系中，客户表是‘一’方，而订单表是‘多’方。如果指定使用级联删除，从客户数据中删除一个记录，相对应之订单记录也会被删除。

删除查询不只删除指定字段之中的数据，它会删除全部的记录。如果您要删除在一个特定字段之中的值，请创建一个更新查询将值改变为 Null。

重点

•	当使用删除查询删除记录之后，不能取消此操作。如果想要知道哪些记录已被删除，首先验证使用相同条件的选定查询的结果，然后运行删除查询。

•	随时将数据做备份副本。如果您误删除记录，可以从备份副本中将数据恢复。


INNER JOIN 运算

组合两个表中的记录，只要在公共字段之中有相符的值。

语法

FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

INNER JOIN 运算可分为以下几个部分：

部分	描述
table1, table2	从其中组合记录的表名称。
field1, field2	被联接字段的名称。如果这些字段不是数值的，被联接的字段必须是相同的数据类型，并且包含相同类型的数据，但是它们不必名称相同。
compopr	任何关系比较运算符："=," "<," ">," "<=," ">=," 或 "<>."
说明

可以在任何的 FROM 子句中使用 INNER JOIN 运算。这是最普通的联接类型。只要在这两个表的公共字段之中有相符值，内部联接将组合两个表中的记录。

可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。不同的是在选择所有的部门（即使某些部门并没有指定员工)或所有的员工（即使某些员工没有被指定至任何部门），可以使用 LEFT JOIN 或 RIGHT JOIN运算创建一个外部联接。

如果想试图联接包含Memo 数据类型或 OLE Object 数据类型数据的字段，将会发生错误。

可以联接任何两个相同类型的数值字段。例如，可以联接自动编号及 Long 的字段，因为它们是相同的类型。不过，不能联接 Single 数据类型及 Double 数据类型的字段。

下列示例显示如何在类标识符字段联接类表及产品表：

SELECT CategoryName, ProductName

FROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID;

在上面的示例中，类标识符是已被联接的字段，但是它并不包含在查询输出中，因它并非被包含在 SELECT 语句之中。在这个示例中，若要包含联接字段，将字段名包含在 SELECT 语句中，

Categories.CategoryID.

也可以使用下列语法，在一个 JOIN 语句中链接多个 ON 子句：

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];

也可以使用下列语法，嵌套 JOIN 语句：

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

在一个 INNER JOIN 之中，可以嵌套 LEFT JOIN 或 RIGHT JOIN，但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。


INSERT   INTO 语句

添加一个或多个记录至一个表。此动作可引用为一个追加查询。

语法

多重记录追加查询：

INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression

单一记录追加查询：

INSERT INTO target [(field1[, field2[, ...]])]
VALUES (value1[, value2[, ...])

INSERT INTO 语句可分为以下几个部分：

部分	描述
target	欲追加记录的表或查询的名称。
externaldatabase	外部数据库路径。对于路径的描述，请参阅IN 子句。
source	复制记录的来源表或查询的名称。
field1, field2	如果后面跟的是 target 参数，则为要追加数据的字段名；如果后面跟的是 source 参数，则为从其中获得数据的字段名。
tableexpression	从其中得到要插入的记录的表名。此参数可以是一个单一表名称，或由 INNER JOIN、LEFT JOIN、或 RIGHT JOIN运算合成的结果，或一个已保存的查询。
value1, value2	欲插入新记录的特定字段的值。每一个值将依照它在列表中的位置，顺序插入相关字段：value1 将被插入至追加记录的 field1 之中，value2 插入至 field2，依此类推。必须使用逗点将这些值分隔，并且将文本字段用引号 ('�') 括起来。
说明

可以使用 INSERT INTO 语句来添加一个单一记录至一个表中，如以上所示使用单一记录追加查询语法。在这个例子中，代码指定了该记录每一字段的名称和值。必须指定追加数值的记录的每一个字段和那个字段的值。如果您没有指定每一个字段时，缺省值或 Null 值将被插入至没有数据的字段之中。这些记录将被添加至表的尾部。

通过使用 SELECT ... FROM 子句如以上所示的多重记录追加查询语法，也可以从另一表或查询使用 INSERT INTO追加一组记录。在这个示例中，SELECT 子句将指定追加字段至指定的 target 表。

source 或 target 表可以指定一个表或查询。如果指定查询，Microsoft Jet 数据库引擎追加记录至任何和所有由查询所指定的表中。

INSERT INTO 是可选的，但当使用时，请置於 SELECT 语句之前。

如果目的表包含一个主键，确定追加至主键字段之值是唯一的且不可为 Null 值；如果没有这样做， Microsoft Jet 数据库引擎将不会追加记录。

如果使用自动编号字段追加记录至一个表中，并且您要将追加记录重新编号，不要包含自动编号字段在您的查询之中。如果您要保持字段中的原始值，请将自动编号加在您的查询之中。

使用 IN 子句，可追加记录至另一个数据库中的表。

若要创建一个新的表，使用 SELECT...INTO 语句，而非创建一个创建表查询。

若要在运行追加查询之前找出哪些记录是被追加的，首先执行和查阅一个使用相同的选择条件之选定查询所获得的结果。

追加查询为从一个或多个表中复制记录至另一个表。您追加的表包含记录将不会被追加查询所影响。

除了从另一表中来追加现存的记录，可以指定在单一追加记录之中使用 VALUES 子句来指定对每一字段的值。如果您省略字段列表，VALUES 子句在表之中必须包含每一字段的值；否则， INSERT运算将会失败。使用额外的 INSERT INTO 语句与一个 VALUES 子句来创建您要的每一个额外的记录。


LEFT JOIN 和 RIGHT JOIN 运算

当使用在任何的 FROM 子句中，将组合来源表的记录。

语法

FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compopr table2.field2

LEFT JOIN 及 RIGHT JOIN 运算可分为以下几个部分：

部分	描述
table1, table2	记录被组合的表的名称。
field1, field2	被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据，但它们不需要有相同的名称。
compopr	任何的关系比较运算子："=," "<," ">," "<=," ">=," 或 "<>."
说明

使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个（左边）开始的两个表中的全部记录，即使在第二个（右边）表中并没有相符值的记录。

使用一个 RIGHT JOIN 运算创建一个右边外部联接。右边外部联接将包含了从第二个（右边）开始的两个表中的全部记录，即使在第一个（左边）表中并没有匹配值的记录。

例如，可以使用 LEFT JOIN 与部门（左边）及员工（右边）表来选择所有的部门，包含了没有分配到员工的部门。可以使用 RIGHT JOIN 选择所有的员工，包含了没有分配到部门的员工。

下列示例显示如何在类标识符字段中联接类表及产品表。查询将会列出所有种类的列表，包含那些没有产品在其中的种类：

SELECT CategoryName,

ProductName

FROM Categories LEFT JOIN Products

ON Categories.CategoryID = Products.CategoryID;

在此示例中，类标识符是联接字段，但它并不会包含在查询结果之中，因为它没有被包含在 SELECT 语句中。要包含联接的字段，请在 SELECT 语句中输入字段名 - 在这个示例中为 Categories.CategoryID。

注意

•	使用 INNER JOIN 运算创建一个查询，且该查询只包含在联接字段中有相同数据的记录。

•	在 INNER JOIN 之中可以写一个嵌套的 LEFT JOIN 或一个 RIGHT JOIN，但是在一个 LEFT JOIN 或一个 RIGHT JOIN 之中不能写嵌套的 INNER JOIN。请参阅 INNER JOIN 主题中有关使用嵌套的讨论，从其中可获知如何在其它联接中编写嵌套联接的信息。

•	可以链接多个 ON 子句。若需更多信息，请参阅在 INNER JOIN 主题中的子句链接的讨论。

•	如果您想试图联接包含Memo 数据类型或 OLE Object 数据类型的字段，将会发生错误。


PARAMETERS 声明

声明在一参数查询中的每一个参数的名称及数据类型。

语法

PARAMETERS name datatype [, name datatype [, ...]]

PARAMETERS 声明有这些部分：

部分	描述
name	参数的名称。它将赋予 Parameter对象的 Name 属性，并用于在 Parameter 集合中识别这个参数。当应用程序运行查询时，可用 name 作为字符串显示在对话框中。包含空格或标点符号的文本应用方括号 ([ ]) 括起来。例如，[Low price] 及 [Begin report with which month?] 都是有效的 name 参数。
dataType	主要的 Microsoft Jet SQL 数据类型之一或它们的同义字。
说明

对于有规则运行的查询，可用 PARAMETERS 声明创建一个参数查询。参数查询便于自动更改查询准则。对于参数查询，代码必须提供每次查询运行时使用的参数。

PARAMETERS 声明是可选的，但是当使用时，须置於任何其他语句之前，包括 SELECT 语句。

如果声明包含一个以上的参数，用逗点将它们分隔。下列示例中声明了两个参数：

PARAMETERS [Low price] Currency, [Beginning date] DateTime;

在 WHERE 子句 或 HAVING 子句中，可用 name，但不能用 DataType。下列示例中要提供两个参数，然后使用这个条件来查询 Orders 表中的记录。

PARAMETERS [Low price] Currency,

[Beginning date] DateTime;

SELECT OrderID, OrderAmount

FROM Orders

WHERE OrderAmount > [Low price]

AND OrderDate >= [Beginning date];


PROCEDURE 子句

为查询定义名称和可选的参数。

语法

PROCEDURE name [param1 datatype[, param2 datatype[, ...]]

PROCEDURE 子句可分为以下几个部分：

部分	描述
name	过程的名称。它必须遵从标准命名约定。
param1, param2	字段的名称或参数。例如： PROCEDURE Sales_By_Country [Beginning Date] DateTime, [Ending Date] DateTime; 关于参数的详细信息，请参阅 PARAMETERS 声明。
datatype	主要的 Microsoft Jet SQL 数据类型之一或它们的同义字。
说明

由 PROCEDURE 子句（指定过程名称的）、可选的参数定义列表和单个 SQL 语句组成的 SQL 过程。例如，过程 Get_Part_Number 可以运行一个检索指定部分的号码的查询。

注意

•	如果子句包含一个以上的字段定义 （即，param-datatype 对），用逗点将它们分隔。

•	PROCEDURE 子句后面必须跟一个 SQL 语句（例如，一个 SELECT 语句 或 UPDATE 语句）。


SELECT...INTO 语句

创建一个创建表查询。

语法

SELECT field1[, field2[, ...]] INTO NewTable [IN externaldatabase]
FROM source

SELECT...INTO 语句可分为以下几个部分：

部分	描述
field1, field2	欲复制至新表的字段的名称。
NewTable	欲创建的表的名称。它必须遵循标准命名约定。如果 NewTable 的名称与现存表的名称相同时，将会发生可以捕捉到的错误。
externaldatabase	至外部数据库的路径。有关路径的描述，请参阅IN 子句。
source	从其中选择记录的现存表的名称。它可以是单一表或多重表或一个查询。
说明

可以使用生成表查询来存档记录、生成表的复制备份、或生成输出至另一个数据库的表的副本、或用作定期显示数据的报表的依据。例如，可以每月运行一次同样的生成表查询，生成地区的销售月报。

注意

•	可能要为新表定义一个主键。创建新表时，新表中的字段将继承查询基本表中每一个字段的数据类型及大小，但不传递其他的字段或表属性。

•	添加数据至一个现存的表时，使用 INSERT INTO 语句，不用创建追加查询。

•	在运行生成表查询之前，若要知道会选择哪些记录，可以先看一看使用相同选择条件的 SELECT 语句的结果。


SQL 子查询

子查询是一个 SELECT 语句，它嵌套在一个 SELECT、SELECT...INTO 语句、INSERT...INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。

语法

可用三种语法来创建子查询：

comparison [ANY | ALL | SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[NOT] EXISTS (sqlstatement)

子查询可分为以下几个部分：

部分	描述
comparison	一个表达式及一个比较运算符，将表达式与子查询的结果作比较。
expression	用以搜寻子查询结果集的表达式。
sqlstatement	SELECT 语句，遵从与其他 SELECT 语句相同的格式及规则。它必须括在括号之中。
说明

可以使用子查询来替代 SELECT 语句的字段列表中的表达式，或替代在 WHERE 子句 或 HAVING 子句中的表达式。在子查询之中，在 WHERE 或 HAVING 子句的表达式中，用于计算的特定值是由 SELECT 语句提供的。

使用 ANY 或 SOME 谓词，它们是同义字，来检索主查询中的记录，这些记录要满足在子查询中检索的任何记录的比较条件。下列示例将返回全部单价比任何以 25% 或更高的折扣卖出的产品高的产品：

SELECT * FROM Products

WHERE UnitPrice > ANY

(SELECT UnitPrice FROM OrderDetails

WHERE Discount >= .25);

使用 ALL谓词只检索主查询中的这些记录，它们满足在子查询中检索的所有记录的比较条件。如果将前一个示例中的 ANY 改为 ALL，查询只会返回单价比全部以 25% 或更高的折扣卖出的产品高的产品。这是更多的限制。

用 IN 谓词，只能在主查询检索那些记录，在子查询中的某些记录也包含和它们相同的值。下列示例返回有 25% 或更高的折扣的所有产品：

SELECT * FROM Products

WHERE ProductID IN

(SELECT ProductID FROM OrderDetails

WHERE Discount >= .25);

相反，可用 NOT IN 在主查询中检索那样的记录，在子查询中没有包含与它们的值相同的记录。

在 true/false 比较中使用 EXISTS 谓词（与可选的 NOT 保留字一道）来决定子查询是否会返回任何记录。

也可以在子查询中使用表名称别名来引用列在子查询之外的 FROM 子句中的表。下列示例返回工资等于或高于所有职位相同员工的平均工资的员工姓名。这张员工表的别名为 "T1"：

SELECT LastName,

FirstName, Title, Salary

FROM Employees AS T1

WHERE Salary >=

(SELECT Avg(Salary)

FROM Employees

WHERE T1.Title = Employees.Title) Order by Title;

在前面的示例中，AS 保留字是可选的。

某些子查询在交叉表查询中 是允许的，特别是谓词（那些在 WHERE 子句中的）。将子查询作为输出（那些列在 SELECT 中的）在交叉表查询中是不允许的。


TRANSFORM 语句

创建交叉表查询。

语法

TRANSFORM aggfunction
selectstatement
PIVOT pivotfield [IN (value1[, value2[, ...]])]

TRANSFORM 语句可分为以下几个部分：

部分	描述
aggfunction	在选定数据上运作的 SQL 合计函数。
selectstatement	SELECT 语句。
pivotfield	在查询的结果集中创建列标题时用的字段或表达式。
value1, value2	用来创建列标题的固定值。
说明

使用交叉表查询来摘要数据时，从指定的字段或表达式中选定值作为列标题，这样，可以用比选定查询更紧凑的格式来观察数据。

TRANSFORM 是可选的，但在使用它时，要作为  SQL 字符串中的第一个语句。它出现在 SELECT 语句（指定作为行标题的字段的）之前，还出现在 GROUP BY 子句（指定行分组的）之前。可以有选择地包含其它子句，例如 WHERE 子句，它指定附加的选择或排序条件。也可以将子查询当作谓词，特别是在叉表查询的 WHERE 子句中。

 pivotfield 返回的值被用作查询结果集中的列标题。例如，在交叉表查询中，将根据销售图表按销售月份创建 12 个列。可以限制 pivotfield 用列在可选的 IN 子句中的固定值（value1, value2）来创建标题。也可以用没有数据存在的固定值来创建附加的列。


UNION 运算

创建一个联合查询，它组合了两个或更多的独立查询或表的结果。

语法

[TABLE] query1 UNION [ALL] [TABLE] query2 [UNION [ALL] [TABLE] queryn [ ... ]]

UNION 运算可分为以下几个部分：

部分	描述
query1-n	SELECT 语句、已存储的查询的名称、或冠以 TABLE  关键字的存储表的名称。
说明

可以在任何组合中、单一 UNION 运算中，合并两个或多个查询、表、及 SELECT 语句的结果。下列示例将名为 New Accounts 的现存表和一个 SELECT 语句合并：

TABLE [New Accounts] UNION ALL

SELECT *

FROM Customers

WHERE OrderAmount > 1000;

按照缺省规定，使用 UNION 运算时不返回重复的记录；然而，可以包含 ALL 谓词来确保返回所有的记录。这样，运行查询的速度也会快些。

所有在一个联合运算中的查询，必须请求相同数目的字段；但是，字段不必大小相同或数据类型相同。

只能在第一个 SELECT 语句中使用别名，因为它们在其他语句中已被省略。在 ORDER BY 子句中，可引用在第一个 SELECT 语句中被调用的字段名。

注意

•	要将返回的数据分组，可以在每一个 query 参数中使用 GROUP BY 子句 或 HAVING 子句。

•	要想以指定的顺序来显示返回的数据，可以在最后一个 query 参数的末尾使用 ORDER BY 子句。


UPDATE 语句

创建一个更新查询，根据指定的条件更改指定表中的字段值。

语法

UPDATE table
SET newvalue
WHERE criteria;

UPDATE 语句可分为以下几个部分：

部分	描述
table	表的名称，其中包含要更改的数据。
newvalue	表达式，用来计算要插入更新记录中特定字段的值。
criteria	表达式，用来计算被更新的记录。只有符合表达式的记录才会被更新。
说明

当需要更改多个记录，或要更改的记录在多重表中时，UPDATE 特别有用。

可以同时更改多个字段。下列示例为对联合王国的一家公司增加 10% 的 Order Amount （订货量）和 3% 的 Freight （货运）：

UPDATE Orders

SET OrderAmount = OrderAmount * 1.1,

Freight = Freight * 1.03

WHERE ShipCountry = 'UK';

重点

•	UPDATE 不生成结果集。而且当使用更新查询更新记录之后，不能取消这次操作。如果想知道哪些记录被更新，先看一下使用相同的条件的选定查询的结果，然后运行更新查询。

•	随时注意维护数据的复制备份。如果更新了错误记录，可从备份副本中恢复这些数据。


WITH OWNERACCESS OPTION 声明

在有安全工作组的多用户环境中，使用这个带查询的声明，可以给运行这个查询的用户以查询拥有者相同的权限。

语法

sqlstatement
WITH OWNERACCESS OPTION

说明

WITH OWNERACCESS OPTION 声明是可选的。

下列示例使用户能够查看工资信息（即使用户没有权限查看工资表），提供查询主人拥有的权限：

SELECT LastName,

FirstName, Salary

FROM Employees

ORDER BY LastName

WITH OWNERACCESS OPTION;

如果用户没有创建或添加一个表的权利，可用 WITH OWNERACCESS OPTION 使用户能够运行创建表查询或追加查询。

如果要强制工作组安全性设置及用户的权限，不要包含 WITH OWNERACCESS OPTION 声明。

此选项要求您必须访问与该数据库相关的 System.mdw 文件。它只在安全的多用户实现中才真正有用。


SQL 合计函数

使用 SQL 合计函数，可以对一组数值进行各种不同的统计。可以在查询中使用这些函数。也可以在 QueryDef 对象的 SQL 属性的合计表达式中、在创建一个基于 SQL 查询的 Recordset 对象时使用这些函数。

Avg 函数

Count 函数

Min 和 Max 函数

StDev 和 StDevP 函数

Sum 函数

Var 和 VarP 函数


Avg 函数

计算包含在特定查询字段中的一组数值的算术平均值。

语法

Avg(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算平均值的数据；或者标识一个表达式，它用该字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称、常量或函数 (此函数可以是一个内部的或用户自定义的，但不能是其他 SQL合计函数)。

说明

使用 Avg 计算的平均值是算术平均值（将全部值的总和除以值的数目）。例如，可以使用 Avg 计算货运的平均费用。

Avg 函数在计算中不计任何 Null 字段。

可以在查询表达式中及 QueryDef 对象的 SQL 属性中使用 Avg，或在创建一个基于 SQL 查询的 Recordset 对象时使用 Avg 。


Count 函数

计算从查询返回的记录数。

语法

Count(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算的数据；或者是一个表达式，它使用此字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称或函数 (此函数可以是内部的或用户定义的，但不能是其他 SQL 合计函数)。您可以计算任何种类的数据，包含文本数据。

说明

可以使用 Count 计算下一级查询的记录数。例如，可以使用 Count 计算运往指定国家的货物订单数量。

虽然 expr 能执行一个字段上的计算，但 Count 只是简单计算记录的数量。并不管记录中保存的是什么值。

Count 函数不计算具有 Null 字段的记录，除非 expr  是个星号 (*) 通配符。如果使用星号，Count 将计算所有记录的总量，包括有 Null 的字段的记录。Count(*) 比 Count ([Column Name]) 快得多。不要将星号放在引号 (' ')中。下列示例计算 Orders 表之中的记录数：

SELECT Count(*)

AS TotalOrders FROM Orders;

如果 expr 标识多重字段，在至少有一个字段的值不为 Null 的情况下， Count 函数只计算一个记录。如果全部的指定字段为 Null，没有记录会被计算。使用 (&) 分隔字段名。下列示例显示如何限制计算在 ShippedDate 或 Freight 皆不为 Null 情况下的记录：

SELECT

Count('ShippedDate & Freight')

AS [Not Null] FROM Orders;

在查询表达式中可以使用 Count。也可以在 QueryDef 对象的 SQL 属性中使用此表达式，或在创建一个基于 SQL 查询的 Recordset 对象时使用此表达式。


First 和 Last 函数

在查询所返回的结果集中，第一个记录或最后一个记录所返回的字段值。

语法

First(expr)

Last(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算的数据；或者是一个表达式，它使用此字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称、常量或函数 (此函数可以是内部的或用户定义的，但不能是其他 SQL 合计函数)。

说明

First 及 Last 函数与在 DAO Recordset 对象中的 MoveFirst及 MoveLast 方法相类似。它们只简单返回查询结果集中的第一个或最后一个记录的指定字段值。因为通常返回的记录没有一定的顺序 (除非查询中包含一个 ORDER BY 子句)，所以这些函数返回的记录会任意地排列。


Min 和 Max 函数

在查询时从一组指定字段的值中返回最小或最大值。

语法

Min(expr)

Max(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算的数据；或者是一个表达式，它使用此字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称、常量或函数 (此函数可以是内部的或用户定义的，但不能是其他 SQL 合计函数)。

说明

可以使用 Min 及 Max 来计算字段中的最小及最大值，该字段是基于指定的合计或分组的。例如，可以使用这些函数返回最低和最高的货运成本。如果没有指定合计，则使用整个表。

可以在查询表达式中，可以在 QueryDef 对象的 SQL 属性中，使用 Min 及 Max；或当创建一个以 SQL 查询为基础的 Recordset 对象时，使用 Min 及 Max。


StDev 和 StDevP 函数

返回总体或总体样本的标准偏差的估计值，此估计值用包含在一个查询的指定字段中的一组值来表示。

语法

StDev(expr)

StDevP(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算的数据；或者是一个表达式，它使用此字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称、常量或函数 (此函数可以是内部的或用户定义的，但不能是其他 SQL 合计函数)。

说明

StDevP 函数计算总体，而 StDev 函数则计算总体样本。

如果下一级查询中包含两个以下的记录（或没有记录，对于StDevP 函数），这两个函数将返回一个 Null 值（表示不能计算标准偏差）。

可以在查询表达式中使用 StDev 和 StDevP 函数。也可以在QueryDef 对象的 SQL 属性中，或当创建一个基于 SQL 查询的 Recordset 对象时，使用此表达式。


Sum 函数

返回包含在指定查询字段中一组值的总计。

语法

Sum(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算的数据；或者是一个表达式，它使用此字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称、常量或函数 (此函数可以是内部的或用户定义的，但不能是其他 SQL 合计函数)。

说明

Sum 函数求字段中值的总和。例如，可用 Sum 函数计算货运的总费用。

Sum 函数不计包含 Null 值的字段。下列示例显示如何计算产品的 UnitPrice （单价）及 Quantity （数量）字段的合计：

SELECT

Sum(UnitPrice * Quantity)

AS [Total Revenue] FROM [Order Details];

可以在一个查询表达式之中使用 Sum 函数。也可以在QueryDef 对象的 SQL 属性中，或当创建一个基于 SQL 查询的 Recordset 时，使用此表达式。


Var 和 VarP 函数

返回一个总体或总体样本的方差的估计值，此估计值用包含在指定查询字段中的一组值来表示。

语法

Var(expr)

VarP(expr)

其中 expr 代表一个字符串表达式，它或者标识一个字段，该字段包含要计算的数据；或者是一个表达式，它使用此字段中的数据来执行计算。在 expr 中的操作数可以包含表字段的名称、常量或函数 (此函数可以是内部的或用户定义的，但不能是其他 SQL 合计函数)。

说明

使用 VarP 函数计算总体，而 Var 函数计算总体样本。

如果下一级查询中包含两个以下的记录，Var 及 VarP 函数将返回一个 Null 值，该表示不能计算方差。

在查询表达式或 SQL 语句中，可以使用 Var及 VarP 函数。


在 SQL 函数中计算字段

可用 SQL 合计函数中的字符串表达式参数来计算字段中的值。例如，可以将一个字段的值乘一系数来计算百分比 (如附加税或销售税)。

下列表提供了对 Northwind.mdb 数据库的 Orders （订单）及 Order Details （订货明细）表中字段进行计算的示例。

计算	示例
往字段中加一个数	Freight + 5
从字段中减一个数	Freight - 5
字段乘以一数	UnitPrice * 2
字段除以一数	Freight / 2
两字段相加	UnitsInStock + UnitsOnOrder
两字段相减	ReorderLevel - UnitsInStock
下列示例计算 Northwind.mdb 数据库中所有订单的平均折扣量。它将单价及折扣字段中的值相乘，算出每一份订单的折扣，然后计算平均值。可以在 Visual Basic 代码的 SQL 语句中使用此表达式：

SELECT Avg(UnitPrice * Discount) AS [Average Discount] FROM [Order Details];


Between...And 运算符

判断表达式的值是否落在指定的范围中。可以在 SQL 语句中使用这个运算符。

语法

expr [Not] Between value1 And value2

Between...And 运算符语法包含以下部分：

部分	描述
expr	识别字段的表达式，它包含要计算的数据。
value1，value2	为要计算的 expr 而设置的表达式。
说明

如果 expr 的值介于 value1 和 value2 之间（含 value1 和 value2 ），则 Between...And 运算符返回 True；否则返回 False。也可与逻辑运算符 Not 连用来表示相反的条件（即， expr 是否落在 value1 和 value 2  所定义的范围之外）。

可用 Between...And 来判断字段值是否落在指定的数值范围内。下列的例子判断订单是否发往邮编指定的地点。如果邮编介于 98101 和 98199 之间，则 IIf 函数会返回 "本地的"。否则返回 "外埠的"。

SELECT IIf(PostalCode Between 98101 And 98199, "Local", "Nonlocal")

FROM Publishers

如果 expr、value1 或 value2 是 Null，则 Between...And 会返回一 Null 的值。

因为通配符，如 *，是被视为文本的，所以不能与 Between...And 运算符连用。例如，不能用 980* 和 989* 来查找所有以 980 至 989 开头的邮编，只能用其它两个办法来替代。可以在查询中添加一表达式，取文本字段中最左边的三个字符，再对那些字符使用 Between...And ；或者在上下限的值上添加额外的字符 - 在这个例子里，是从 98000 至 98999，如果使用扩展的邮编的话则从 98000 至 98999 - 9999。（必须在低的数值中省略 - 0000 ，因为，如果某些邮编有扩展部分而其它的没有，则 98000 会被忽略）


Microsoft Jet 数据库引擎 SQL 和 ANSI SQL 的比较

                  {ewc HLP95EN.DLL,DYNALINK,"特性":"daSQLJetVANSIS"

一般来说，Microsoft Jet 数据库引擎  SQL 依从 ANSI-89 Level 1。然而，ANSI SQL 的某些功能在 Microsoft Jet SQL 中没有实现。相反地，在 ANSI SQL 中也不支持 Microsoft Jet SQL 所包含的某些保留字和性能。

主要的差异

•	Microsoft Jet SQL 和 ANSI SQL 都有不同的保留字和数据类型。详细信息请参阅 Microsoft Jet 数据库引擎 SQL 的保留字和等效的 ANSI SQL 数据类型。

•	Between...And 的构造应用了不同的规则，语法如下:

expr1 [NOT] Between value1 And value2

在 Microsoft Jet SQL 中，value1 可以大于 value2; 而在 ANSI SQL 中，value1 则必须等于或小于 value2。

•	运算符 Like 使用不同的通配符。

符合字符	Microsoft Jet SQL	ANSI SQL
任何单一字符	?	_（下划线）
零或更多的字符	*	%
•	Microsoft Jet SQL 通常限制的比较少。例如，它允许在表达式中进行分组和排序。

•	Microsoft Jet SQL 提供了更强有力的表达式。

Microsoft Jet SQL 的加强功能

Microsoft Jet SQL 提供了下列加强功能：

•	TRANSFORM 语句，它给交叉表查询提供支持

•	附加的合计函数，如 StDev 和 VarP

•	定义参数查询的 PARAMETERS 声明

Microsoft Jet SQL 不支持的 ANSI SQL 功能

Microsoft Jet SQL 不支持下列 ANSI SQL 的功能：

•	安全性语句，如 COMMIT、GRANT 和 LOCK。

•	DISTINCT 合计函数引用。例如，Microsoft Jet SQL 不允许 SUM（DISTINCT 字段名）。

•	用来限制查询返回行数的 LIMIT TO nn ROWS 子句。只能用 WHERE 子句 来限制查询的范围。


等效的 ANSI SQL 数据类型

下面的表格列出了 ANSI SQL 数据类型和等效的 Microsoft Jet 数据库引擎  SQL 数据类型与他们之间有效的同义字。

ANSI SQL  的数据类型	Microsoft Jet  SQL 的数据类型	同义字
BIT，BIT VARYING	BINARY（请参阅注意）	VARBINARY
不支持	BIT（请参阅注意）	BOOLEAN，LOGICAL，LOGICAL1，YESNO
不支持	BYTE	INTEGER1
不支持	COUNTER	AUTOINCREMENT
不支持	CURRENCY	MONEY
DATE，TIME，TIMESTAMP	DATETIME	DATE，TIME，TIMESTAMP
不支持	GUID
DECIMAL	不支持
REAL	SINGLE	FLOAT4，IEEESINGLE，REAL
DOUBLE PRECISION，FLOAT	DOUBLE	FLOAT，FLOAT8，IEEEDOUBLE，NUMBER，NUMERIC
SMALLINT	SHORT	INTEGER2，SMALLINT
INTEGER	LONG	INT，INTEGER，INTEGER4
INTERVAL	不支持
不支持	LONGBINARY	GENERAL，OLEOBJECT
不支持	LONGTEXT	LONGCHAR，MEMO，NOTE
CHARACTER，CHARACTER VARYING	TEXT	ALPHANUMERIC，CHAR，CHARACTER，STRING，VARCHAR
不支持	VALUE（请参阅注意）
注意

•	ANSI SQL 的 BIT 数据类型并不对应 Microsoft Jet SQL 的 BIT 数据类型，但是它对应 BINARY 的数据类型。ANSI SQL 并没有等效于 Microsoft Jet SQL 的 BIT 的数据类型。

•	VALUE 保留字不表示由 Microsoft Jet 数据库引擎定义的数据类型。


In 运算符

判断表达式的数值是否等于指定列表中几个数值中的一个。

语法

expr [Not] In(value1, value2,  . . .)

说明

运算符 In 的语法包含以下的部分:

部分	描述
expr	识别字段的表达式，它包含要计算的数据。
value1，value2	为要计算的 expr 而设置的表达式或表达式列表。
如果在数值的列表中找到了 expr ，则 In 运算符返回 True； 否则返回 False。也可以加上逻辑运算符 Not 来计算相反的条件（即 expr 是否不在数值列表中）。

例如，可用 In 运算符来判断哪些订单被发往指定的地区集合：

SELECT *

FROM Orders

WHERE ShipRegion In ('Avon','Glos','Som')


Like 运算符

将字符串表达式和 SQL 表达式中的样式做比较。

语法

expression Like "pattern"

运算符 Like 的语法包含下列部分:

部分	描述
expression	用在 WHERE 子句中的 SQL 表达式。
Pattern	表达式与之比较的字符串或字符串文本。
说明

可用 Like 运算符来找出符合指定样式的字段值。对于 pattern，可以指定完整的值（例如，Like "Smith"），或用通配符来找出一数值范围(例如，Like "Sm*")。

在一表达式中，可用 Like 运算符比较字段值和字符串表达式。例如，如果在 SQL 查询中输入 Like "C*"，则查询会返回所有字段中以字母 C 开头的值。在参数查询 中，可以提示用户提供要搜寻的样式。

在下面的例子里，会返回以字母 P 开头、而其后接着介于 A 到 F 之间的任何字母和三个数字的数据：

Like "P[A-F]###"

在下面的列表中说明如何使用 Like 运算符来测试不同样式的表达式。

符合的种类	样式	符合（返回 True ）	不符合（返回 False ）
多个字符	a*a	aa，aBa，aBBBa	aBC
	*ab*	abc，AABB，Xab	aZb，bac
特殊字符	a[*]a	a*a	aaa
多个字符	ab*	abcdefg，abc	cab，aab
单一字符	a?a	aaa，a3a，aBa	aBBBa
单一数字	a#a	a0a，a1a，a2a	aaa，a10a
字符范围	[a-z]	f，p，j	2，&
范围之外	[!a-z]	9，&，%	b，a
非数字	[!0-9]	A，a，&，~	0，1，9
组合字	a[!b-m]#	An9，az0，a99	abc，aj0


Microsoft Jet 数据库引擎 SQL 的数据类型

Microsoft Jet 数据库引擎 SQL 的数据类型是由 13 个 Microsoft Jet 数据库引擎所定义的主要数据类型与这些数据类型所认可的数个合法同义字所共同组成。

下面的表格列出了主要数据类型。同义字在 Microsoft Jet 数据库引擎 SQL 保留字 里被视为等同的。

数据类型	存储大小	描述
BINARY	每个字符占一个字节	任何类型的数据都可存储在这种类型的字段中。不需数据转换（例如，转换到文本数据）。数据输入二进制字段的方式决定了它的输出方式。
BIT	1 个字节	Yes 和 No ，以及只包含这两个数值之一的字段。
BYTE	1 个字节	介于 0 到 255 之间的整型数。
COUNTER	4 个字节	每当有新记录添加至表中时，由 Microsoft Jet 数据库引擎自动增加数值。在 Microsoft Jet 数据库引擎中，此数值的数据类型为 Long。
CURRENCY	8 个字节	介于 �-�922,337,203,685,477.5808 到 922,337,203,685,477.5807 之间的符号整数。
DATETIME （清参阅 DOUBLE ）	8 个字节	介于 100 到 9999 年的日期或时间数值。
GUID	128 个位	用于远程过程调用的唯一识别数字。
SINGLE	4 个字节	单精度浮点数，负数范围是从 -3.402823E38 到 -1.401298E-45，正数从1.401298E-45 到 3.402823E38，和 0。
DOUBLE	8 个字节	双精度浮点数，负数范围是从 -1.79769313486232E308 到 -4.94065645841247E-324，正数从 4.94065645841247E-324 到 1.79769313486232E308，和 0。
SHORT	2 个字节	介于 -32,768 到 32,767 的短整型数。
LONG	4 个字节	介于 -2,147,483,648 到 2,147,483,647 的长整型数。
LONGTEXT	每个字符占一个字节	从零到最大 1.2 千兆字节。
LONGBINARY	视实际需要而定	从零到最大 1.2 千兆字节。用于 OLE 对象。
TEXT	每个字符占一个字节	长度从 0 到 255 个字符。
注意   也可以在 SQL 语句里使用 VALUE 保留字。


Microsoft Jet 数据库引擎 SQL 的保留字

下面的列表中包含了Microsoft Jet 数据库引擎在 SQL 语句中使用的所有保留字 。列表中的字，若不是全部大写，也被其它应用程序所保留。所以，这些保留字的个别帮助主题所提供的一般描述并不专注于 SQL 的用法。

注意  跟着一星号 * 的词是被保留的，但是当前在 Microsoft Jet SQL 语句的范畴内并没有意义（例如，Level 和 TableID）。

A

ADD ALL  Alphanumeric - 参阅 TEXT ALTER  And	ANY  AS  ASC AUTOINCREMENT - 参阅 COUNTER Avg
B-C

Between BINARY  BIT  BOOLEAN - 参阅 BIT BY BYTE  CHAR，CHARACTER - 参阅 TEXT	COLUMN CONSTRAINT  Count COUNTER CREATE  CURRENCY
D

DATABASE DATE - 参阅 DATETIME DATETIME  DELETE DESC	DISALLOW DISTINCT  DISTINCTROW  DOUBLE   DROP
E-H

Eqv EXISTS FLOAT，FLOAT8 - 参阅 DOUBLE FLOAT4 - 参阅 SINGLE FOREIGN	FROM  GENERAL - 参阅 LONGBINARY GROUP GUID HAVING
I

IEEEDOUBLE - 参阅 DOUBLE IEEESINGLE - 参阅 SINGLE IGNORE Imp In IN INDEX	INNER  INSERT INT，INTEGER，INTEGER4 - 参阅 LONG INTEGER1 - 参阅 BYTE INTEGER2 - 参阅 SHORT INTO Is
J-M

JOIN KEY LEFT Level* Like LOGICAL，LOGICAL1 - 参阅 BIT LONG	LONGBINARY  LONGTEXT  Max  MEMO - 参阅 LONGTEXT Min  Mod MONEY - 参阅 CURRENCY
N-P

Not NULL  NUMBER - 参阅 DOUBLE NUMERIC - 参阅 DOUBLE OLEOBJECT - 参阅 LONGBINARY On OPTION Or	ORDER  Outer* OWNERACCESS  PARAMETERS  PERCENT  PIVOT  PRIMARY  PROCEDURE
Q-S

REAL - 参阅 SINGLE REFERENCES  RIGHT  SELECT  SET  SHORT  SINGLE	SMALLINT - 参阅 SHORT SOME  StDev StDevP  STRING - 参阅 TEXT Sum
T-Z

TABLE TableID* TEXT  TIME - 参阅 DATETIME TIMESTAMP - 参阅 DATETIME TOP TRANSFORM UNION UNIQUE UPDATE	VALUE  VALUES  Var  VARBINARY - 参阅 BINARY VARCHAR - 参阅 TEXT VarP  WHERE  WITH  Xor YESNO - 参阅 BIT


SQL 表达式

 SQL 表达式是由 SQL 语句组成的字符串表达式。例如， Recordset 对象的 FindFirst 方法使用的 SQL 表达式，是由 SQL WHERE 子句中的选择条件组成的。

Microsoft Jet 数据库引擎利用 Visual Basic for Applications（VBA）的表达式服务来执行简单的算术和函数计算。 Microsoft Jet SQL 表达式使用的所有运算符（除了 Between、In 和 Like）都是由 VBA 表达式服务定义的。另外，VBA 表达式服务提供了 100 个以上、可用在 SQL 表达式中的 VBA 函数。例如，可用这些 VBA 函数在“ Microsoft Access query Design view ”中组成一个 SQL 查询。也可以在 Microsoft Visual C++、Microsoft Visual Basic 和 Microsoft Excel 代码中，在 DAO OpenRecordset 方法的 SQL 查询中使用这些函数。


在字符串比较中使用通配符

固有的样式匹配提供了多用途的字符串比较工具，下面的表格显示了用于 Like 运算符的通配符，以及和它们匹配的数字或字符串。

在样式中的字符	在表达式中的匹配
?	任何单一字符
*	零个或多个字符
#	任何单一数字（0 - 9）
[charlist]	任何在字符表中的单一字符
[!charlist]	任何不在字符表中的单一字符
可用括在括号 ([ ]) 中的一组字符（字符表）来匹配表达式中任何的单一字符，而且字符表中几乎可以包含 ANSI 字符集中的任何字符，包括数字。事实上，特殊字符，如左括号 ([ )、问号(?)、井字号(#)和星号(*)， 当它们括在括号内时，可以直接和它们自己匹配。一组字符内的右括号 ( ]) 不能匹配它自己，但是如果它是一组之外的单一字符，就能用来匹配。

除了括在括号内的字符的简单表列，字符表可以指定一字符范围，用连字符号 (-) 来隔开范围的上下界。例如，在样式 中使用 [A-Z] ，可在包含从 A 到 Z 的任何大写字母的表达式内，找出相应的字符位置。可以在括号之中包含多个范围且不需要在范围间划上界线。例如，[a-zA-Z0-9] 指任何符合文数值的字符。

样式匹配的重要的规则还有：

•	在字符表开头的惊叹号（!），意味着在表达式中寻找那些不包括在字符表中的字符。若惊叹号（!）在括号之外，它只匹配它自己。

•	如果连字符（-）在字符表的开头（如果有惊叹号，则紧跟在惊叹号之后），或在字符表的末尾，则它匹配连字符（-）自己。否则它被视为 ANSI 字符范围的标识。

•	当您指定一个字符范围时，首尾字符必须以升序的顺序出现（A-Z 或 0-100）。例如，[A-Z] 是有效的，而 [Z-A] 则无效。

•	字符序列 [ ] 会被忽略；它会被当作零长度字符串 ("")。


ALTER TABLE 语句示例

此示例在员工表中增加 Currency 数据类型的一个工资字段。

Sub AlterTableX1()

Dim dbs As Database

'在您的计算机中修改此行使其正确指到 Northwind

'的路径。

Set dbs = OpenDatabase("Northwind.mdb")

'添加工资字段至员工表中，

'并且设置为 Currency 数据类型。

dbs.Execute "ALTER TABLE Employees " _

& "ADD COLUMN Salary CURRENCY;"

dbs.Close

End Sub

此示例从员工表中删除工资字段。

Sub AlterTableX2()

Dim dbs  As Database

'在您的计算机中修改此行使其正确指到 Northwind

'的路径。

Set dbs = OpenDatabase("Northwind.mdb")

'从员工表中删除工资字段。

dbs.Execute "ALTER TABLE Employees " _

& "DROP COLUMN Salary;"

dbs.Close

End Sub

此示例在订单表中增加一外部键。这个外部键是基于员工编号字段和引用至员工的表中的员工编号字段。此示例中，在 REFERENCES 子句中并没有列出员工表的员工编号字段，这是因为员工编号为员工表的主键。

Sub AlterTableX3()

Dim dbs As Database

'在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

'在订单表中添加外部键。

dbs.Execute "ALTER TABLE Orders " _

& "ADD CONSTRAINT OrdersRelationship " _

& "FOREIGN KEY (EmployeeID) " _

& "REFERENCES Employees (EmployeeID);"

dbs.Close

End Sub

此示例从订单表中删除外部键。

SubSub()

Dim dbs As Database

'在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

'由订单表中删除 OrdersRelationship 外部键。

dbs.Execute "ALTER TABLE Orders " _

& "DROP CONSTRAINT OrdersRelationship;"

dbs.Close

End Sub


CREATE INDEX 语句示例

此示例在员工表中创建家用电话字段的索引并且扩展员工表。

Sub CreateIndexX1()

Dim dbs As Database

'在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

'在员工表中创建 NewIndex 索引。

dbs.Execute "CREATE INDEX NewIndex ON Employees " _

& "(HomePhone, Extension);"

dbs.Close

End Sub

此示例在客户表中使用 CustomerID 字段创建索引。任何二笔记录的 CustomerID 字段不能有相同的数据，并且 Null 值是不被允许的。

Sub CreateIndexX2()

Dim dbs As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 在 CustomerID 字段中创建单一的索引 CustID。

dbs.Execute "CREATE UNIQUE INDEX CustID " _

& "ON Customers (CustomerID) " _

& "WITH DISALLOW NULL;"

dbs.Close

End Sub


CREATE TABLE 语句，CONSTRAINT 子句示例

此示例使用两个文本字段来创建一个名为“ThisTable”的添加表。

Sub CreateTableX1()

Dim dbs  As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 使用两个文本字段来创建表。

dbs.Execute "CREATE TABLE ThisTable " _

& "(FirstName TEXT, LastName TEXT);"

dbs.Close

End Sub

此示例使用两个文本字段、日期／时间字段、及唯一索引来创建名为“MyTable”的添加表 。

Sub CreateTableX2()

Dim dbs As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 创建使用三字段的表和唯一的

' 索引组成这所有的三个字段。

dbs.Execute "CREATE TABLE MyTable " _

& "(FirstName TEXT, LastName TEXT, " _

& "DateOfBirth DATETIME, " _

& "CONSTRAINT MyTableConstraint UNIQUE " _

& "(FirstName, LastName, DateOfBirth));"

dbs.Close

End Sub

此示例使用两个文本字段和一个整型字段来创建新的表。SSN 字段是主键。

Sub CreateTableX3()

 	Dim dbs As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 使用三字段和一个主键来创建表。

dbs.Execute "CREATE TABLE NewTable " _

& "(FirstName TEXT, LastName TEXT, " _

& "SSN INTEGER CONSTRAINT MyFieldConstraint " _

& "PRIMARY KEY);"

dbs.Close

End Sub


DROP 语句示例

下列示例假设在 Northwind 数据库中的员工表上存在一个假设的 NewIndex 索引。

此示例从员工表中删除 MyIndex 索引。

Sub DropX1()

Dim dbs  As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 从员工表中删除 NewIndex。

dbs.Execute "DROP INDEX NewIndex ON Employees;"

dbs.Close

End Sub

此示例从数据库中删除员工表。

Sub DropX2()

Dim dbs As Database

'在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 删除员工表。

dbs.Execute "DROP TABLE Employees;"

dbs.Close

End Sub


SELECT 语句，FROM 子句示例

下列示例假设在员工表中存在一个假设的工资字段。请注意，此字段实际在 Northwind 数据库员工表之中并不存在。

此示例创建一个 dynaset 型 Recordset，基于 SQL 语句选择在员工表中的所有纪录的姓和名字段。它调用 EnumFields 过程，且该过程打印 Recordset 对象的内容到“调试”窗口。

Sub SelectX1()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 选择员工表中所有记录的姓和名值。

Set rst = dbs.OpenRecordset("SELECT LastName, " _

& "FirstName FROM Employees;")

'移居记录集。

rst.MoveLast

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容

EnumFields rst,12

dbs.Close

End Sub

此示例计算记录的数字，且该记录的数字在邮编字段有输入项并且返回帐簿字段。

Sub SelectX2()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 计算邮编值记录的笔数

' 并且返回在帐簿字段之中的合计。

Set rst = dbs.OpenRecordset("SELECT Count " _

& "(PostalCode) AS Tally FROM Customers;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容。

' 指定其字段宽度为 12。

EnumFields rst, 12

dbs.Close

End Sub

此示例显示员工的人数和平均的及最高的工资。

SubSub()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 计算员工的人数，

' 计算平均工资，并且返回最高工资。

Set rst = dbs.OpenRecordset("SELECT Count (*) " _

& "AS TotalEmployees, Avg(Salary) " _

& "AS AverageSalary, Max(Salary) " _

& "AS MaximumSalary FROM Employees;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 打印记录集的内容。

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 17

dbs.Close

End Sub

EnumFields Sub 过程从调用的过程通过 Recordset 对象，此过程格式并且打印 Recordset 字段至“调试”窗口。intFldLen 变量是需要打印字段的宽度。某些字段可能被截断。

Sub EnumFields(rst As Recordset, intFldLen As Integer)

Dim lngRecords As Long, lngFields As Long

Dim lngRecCount As Long, lngFldCount As Long

Dim strTitle As String, strTemp As String

' 设置 lngRecords 变量到记录集中记录的数目。

lngRecords = rst.RecordCount

' 设置 lngRecords 变量到记录集中字段的数目。

lngFields = rst.Fields.Count

Debug.Print "There are " & lngRecords _

& " records containing " & lngFields _

& " fields in the recordset."

Debug.Print

' 打印列标头的窗体字符串。

strTitle = "Record  "

For lngFldCount = 0 To lngFields - 1

strTitle = strTitle _

& Left(rst.Fields(lngFldCount).Name _

& Space(intFldLen), intFldLen)

Next lngFldCount

' 打印列标头。

Debug.Print strTitle

Debug.Print

' 将 Recordset 做循环处理；打印记录编号和字段值。

rst.MoveFirst

For lngRecCount = 0 To lngRecords - 1

Debug.Print Right(Space(6) & _

Str(lngRecCount), 6) & "  ";

For lngFldCount = 0 To lngFields - 1

' 检查 Null 值。

If IsNull(rst.Fields(lngFldCount)) Then

strTemp = "<null>"

Else

' 设置 strTemp 到字段内容。

Select Case _

rst.Fields(lngFldCount).Type

Case 11

strTemp = ""

Case dbText, dbMemo

strTemp = _

rst.Fields(lngFldCount)

Case Else

strTemp = _

str(rst.Fields(lngFldCount))

End Select

End If

Debug.Print Left(strTemp _

& Space(intFldLen), intFldLen);

Next lngFldCount

Debug.Print

rst.MoveNext

Next lngRecCount

End Sub


IN 子句示例

下列表显示您如何使用 IN 子句来捕获外部数据库的数据。在每一示例之中，假设客户表是保存在外部数据库之中。

外部数据库	SQL 语句
Microsoft Jet 数据库	SELECT CustomerID FROM Customers IN OtherDB.mdb  WHERE CustomerID Like "A*";
dBASE III 或 IV. 捕获数据由 一 dBASE III 表，以 "dBASE III;" 替代 "dBASE IV;"。	SELECT CustomerID FROM Customer IN "C:\DBASE\DATA\SALES" "dBASE IV;" WHERE CustomerID Like "A*";
dBASE III 或 IV 使用数据库语法。	SELECT CustomerID FROM Customer IN "" [dBASE IV; Database=C:\DBASE\DATA\SALES;]  WHERE CustomerID Like "A*";
Paradox 3.x 或 4.x. 若要由一Paradox version 3.x 表捕获数据，以 "Paradox 3.x;" 替代 "Paradox 4.x;"。	SELECT CustomerID FROM Customer IN "C:\PARADOX\DATA\SALES" "Paradox 4.x;" WHERE CustomerID Like "A*";
Paradox 3.x 或 4.x 使用数据库语法.	SELECT CustomerID FROM Customer IN "" [Paradox 4.x;Database=C:\PARADOX\DATA\SALES;]  WHERE CustomerID Like "A*";
Microsoft EXCEL工作表	SELECT CustomerID, CompanyName FROM [Customers$]  IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE CustomerID Like "A*" ORDER BY CustomerID;
在工作表之中的一个命名范围	SELECT CustomerID, CompanyName FROM CustomersRange IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE CustomerID Like "A*" ORDER BY CustomerID;


In 运算符示例

下列示例使用在 Northwind.mdb 数据库的订单表创建查询，且该查询包含所有送货到 Lancashire 和 Essex 的数据及送货日期。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub InX()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 选择订单表中其 ShipRegion 值为

' Lancashire 或 Essex 的记录。

Set rst = dbs.OpenRecordset("SELECT " _

& "CustomerID, ShippedDate FROM Orders " _

& "WHERE ShipRegion In " _

& "('Lancashire','Essex');")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容。

EnumFields rst, 12

dbs.Close

End Sub


WHERE 子句示例

下列示例假设在员工表之中存在一个假设的工资字段。请注意，此字段 实际上在 Northwind 数据库员工表之中并不存在。

此示例选择每一记录的姓和名，且该姓氏为 King。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub WhereX()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 从员工表中选择姓氏为 King 的记录。

Set rst = dbs.OpenRecordset("SELECT LastName, " _

& "FirstName FROM Employees " _

& "WHERE LastName = 'King';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容。

EnumFields rst, 12

dbs.Close

End Sub


GROUP BY 子句示例

此示例创建一列表，列出唯一的工作职称及每种职称的员工人数。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub GroupByX1()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对于每种职称，计算此种职称员工的人数。

Set rst = dbs.OpenRecordset("SELECT Title, " _

& "Count([Title]) AS Tally " _

& "FROM Employees GROUP BY Title;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 打印记录集的内容。

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 25

dbs.Close

End Sub

对每种唯一的工作职称，此示例计算在华盛顿中具有该职称的员工人数。

Sub GroupByX2()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对每种职称，计算具有该职称的员工人数，

' 仅包含在华盛顿区域的员工。

Set rst = dbs.OpenRecordset("SELECT Title, " _

& "Count(Title) AS Tally " _

& "FROM Employees WHERE Region = 'WA' " _

& "GROUP BY Title;")

' populateRecordset。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容。

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 25

dbs.Close

End Sub


HAVING 子句示例

此示例选择工作职称，指定在华盛顿区域中的多个员工。

此示例调用过程 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub HavingX()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 在华盛顿区域中的员工，选择指定的多于一种的工作职称。

Set rst = dbs.OpenRecordset("SELECT Title, " _

& "Count(Title) as Total FROM Employees " _

& "WHERE Region = 'WA' " _

& "GROUP BY Title HAVING Count(Title) > 1;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 打印记录集的内容。

EnumFields rst, 25

dbs.Close

End Sub


ORDER BY 子句示例

在下列示例中显示的 SQL 语句使用 ORDER BY 子句来排列记录，以订单中的姓氏 (Z-A) 做递减排列。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub OrderByX()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 从员工表中选择姓和名值，

' 并且以递减的方式排列。

Set rst = dbs.OpenRecordset("SELECT LastName, " _

& "FirstName FROM Employees " _

& "ORDER BY LastName DESC;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 打印记录集的内容。

EnumFields rst, 12

dbs.Close

End Sub


ALL、 DISTINCT、 DISTINCTROW、 TOP 谓语示例

此示例创建查询，且该查询在 CustomerID 字段结合客户和订单表。客户表并未复制一份 CustomerID 字段，但是订单表必须如此做，因为每一客户能有许多订单。使用 DISTINCTROW 来生成公司的列表，且该公司至少有一笔订单，但是不含订单的任何详细数据。

SubSub()

Dim dbs As Database, rst As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 在 CustomerID 字段联接客户和订单表，

' 选择至少有一笔订单的公司列表。

Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _

& "CompanyName FROM Customers " _

& "INNER JOIN Orders " _

& "ON Customers.CustomerID = " _

& "Orders.CustomerID " _

& "ORDER BY CompanyName;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 25

dbs.Close

End Sub


DELETE 语句示例

此示例删除所有员工其职称为 Trainee 的记录。当 FROM 子句仅包含一个表，您不必在 DELETE 语句中列出表名称。

Sub DeleteX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 删除员工职称为 Trainee 的员工记录。

dbs.Execute "DELETE * FROM " _

& "Employees WHERE Title = 'Trainee';"

dbs.Close

End Sub


INNER JOIN 运算示例

此示例创建二个相等联接：一个是在订货明细表和订单表之间，另一个是在订单表和员工表之间。这是必需的，因为员工表不含业务人员数据，并且订货明细表不含员工数据。查询生成员工和他们的业绩列表。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub InnerJoinX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 在订货明细和订单表之间创建联接，

' 并且在订单和员工表之间创建联接。

' 取得员工和其业绩的列表。

Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _

& "Sum(UnitPrice * Quantity) AS Sales, " _

& "(FirstName & Chr(32) & LastName) AS Name " _

& "FROM Employees INNER JOIN(Orders " _

& "INNER JOIN [Order Details] " _

& "ON [Order Details].OrderID = " _

& "Orders.OrderID ) " _

& "ON Orders.EmployeeID = " _

& "Employees.EmployeeID " _

& "GROUP BY (FirstName & Chr(32) & LastName);")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 20

dbs.Close

End Sub


INSERT INTO 语句示例

此示例选择在一假设的新客户表中的所有记录，并且增加它们至客户表中。当个别的栏没有设计时，此 SELECT 表的列名必须完全地符合那些在 INSERT INTO 表中的列名。

Sub InsertIntoX1()

Dim dbs  As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 在新客户表中选择所有记录，

' 并且添加它们至客户表。

dbs.Execute " INSERT INTO Customers " _

& "SELECT * " _

& "FROM [New Customers];"

dbs.Close

End Sub

此示例创建在员工表中的添加记录。

Sub InsertIntoX2()

Dim dbs  As Database

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 创建在员工表中的新记录，

' 其姓氏是 Washington，名字是 Harry，

' 并且职称是 Trainee。

dbs.Execute " INSERT INTO Employees " _

& "(FirstName,LastName, Title) VALUES " _

& "('Harry', 'Washington', 'Trainee');"

dbs.Close

End Sub


LEFT JOIN、RIGHT JOIN 运算示例

此示例假设在员工表中存在假设的单位名称和单位标识符的字段。注意这些字段实际上在 Northwind 数据库员工表中并不存在。

此示例选择所有单位，包含那些不含员工的单位。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub LeftRightJoinX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 选择所有单位，包含那些不含员工的单位。

Set rst = dbs.OpenRecordset _

("SELECT [Department Name], " _

& "FirstName & Chr(32) & LastName AS Name " _

& "FROM Departments LEFT JOIN Employees " _

& "ON Departments.[Department ID] = " _

& "Employees.[Department ID] " _

& "ORDER BY [Department Name];")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印 Recordset 的内容。

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 20

dbs.Close

End Sub


PARAMETERS 声明示例

此示例需要用户提供职称，然后使用此职称做为查询的准则。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub ParametersX()

Dim dbs As Database, qdf As QueryDef

Dim rst As Recordset

Dim strSql As String, strParm As String

Dim strMessage As String

Dim intCommand As Integer

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("NorthWind.mdb")

' 定义参数子句。

strParm = "PARAMETERS [Employee Title] TEXT; "

' 使用参数定义 SQL 语句。

strSql = strParm & "SELECT LastName, FirstName, " _

& "EmployeeID " _

& "FROM Employees " _

& "WHERE Title =[Employee Title];"

' 创建基于 SQL 语句的 QueryDef 对象。

Set qdf = dbs.CreateQueryDef _

("Find Employees", strSql)

Do While True

strMessage = "Find Employees by Job " _

& "title:" & Chr(13) _

& "  Choose Job Title:" & Chr(13) _

& "   1 - Sales Manager" & Chr(13) _

& "   2 - Sales Representative" & Chr(13) _

& "   3 - Inside Sales Coordinator"

intCommand = Val(InputBox(strMessage))

Select Case intCommand

Case 1

qdf("Employee Title") = _

"Sales Manager"

Case 2

qdf("Employee Title") = _

"Sales Representative"

Case 3

qdf("Employee Title") = _

"Inside Sales Coordinator"

Case Else

Exit Do

End Select

' 创建暂时的快照类型的记录集。

Set rst = qdf.OpenRecordset(dbOpenSnapshot)

' populateRecordset。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 12

Loop

' 删除 QueryDef 因为这是一个演示。

dbs.QueryDefs.Delete "Find Employees"

dbs.Close

End Sub


PROCEDURE 子句示例

此示例命名查询为 CategoryList。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub ProcedureX()

Dim dbs As Database, rst As Recordset

Dim qdf As QueryDef, strSql As String

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

strSql = "PROCEDURE CategoryList; " _

& "SELECT DISTINCTROW CategoryName, " _

& "CategoryID FROM Categories " _

& "ORDER BY CategoryName;"

' 创建基于 SQL 语句的 QueryDef 的名称。

Set qdf = dbs.CreateQueryDef("NewQry", strSql)

' 创建暂时的快照类型记录集。

Set rst = qdf.OpenRecordset(dbOpenSnapshot)

'移居记录集

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 15

' 删除 QueryDef 因为这是一个演示。

dbs.QueryDefs.Delete "NewQry"

dbs.Close

End Sub


SELECT...INTO 语句示例

此示例选择在员工表中的所有记录，然后复制到命名为 Emp Backup 的新表中。

Sub SelectIntoX()

Dim dbs As Database

Dim qdf As QueryDef

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 选择员工表中的所有记录，

' 并且复制到称作员工备份的新表中。

dbs.Execute "SELECT Employees.* INTO " _

& "[Emp Backup] FROM Employees;"

' 删除 QueryDef 因为这是一个演示。

dbs.Execute "DROP TABLE [Emp Backup];"

dbs.Close

End Sub


TRANSFORM 语句示例

此示例使用 SQL TRANSFORM 子句创建交叉表查询显示 1994 年每一季每位员工所接的订单的数目。该 SQLTRANSFORMOutput 函数对此过程的完成是必须的。

SubSub()

Dim dbs As Database

Dim strSQL As String

Dim qdfTRANSFORM As QueryDef

strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

& "Count(OrderID) " _

& "SELECT FirstName & "" "" & LastName AS " _

& "FullName FROM Employees INNER JOIN Orders " _

& "ON Employees.EmployeeID = " _

& "Orders.EmployeeID WHERE DatePart " _

& "(""yyyy"", OrderDate) = [prmYear] "

   	strSQL = strSQL & "GROUP BY FirstName & " _

& """ "" & LastName " _

& "ORDER BY FirstName & "" "" & LastName " _

& "PIVOT DatePart(""q"", OrderDate)"

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

Set qdfTRANSFORM = dbs.CreateQueryDef _

("", strSQL)

SQLTRANSFORMOutput qdfTRANSFORM, 1994

dbs.Close

End Sub

此示例使用 SQL TRANSFORM 子句创建一个稍微复杂的交叉表查询，来显示出每位员工在 1994 年所接订单的总金额。

SubSub()

Dim dbs  As Database

Dim strSQL  As String

Dim qdfTRANSFORM As QueryDef

strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

& "Sum(Subtotal) SELECT FirstName & "" """ _

& "& LastName AS FullName " _

& "FROM Employees INNER JOIN " _

& "(Orders INNER JOIN [Order Subtotals] " _

& "ON Orders.OrderID = " _

& "[Order Subtotals].OrderID) " _

& "ON Employees.EmployeeID = " _

& "Orders.EmployeeID WHERE DatePart" _

& "(""yyyy"", OrderDate) = [prmYear] "

   	strSQL = strSQL & "GROUP BY FirstName & "" """ _

& "& LastName " _

& "ORDER BY FirstName & "" "" & LastName " _

& "PIVOT DatePart(""q"",OrderDate)"

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

Set qdfTRANSFORM = dbs.CreateQueryDef _

("", strSQL)

SQLTRANSFORMOutput qdfTRANSFORM, 1994

dbs.Close

End Sub

Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _

intYear As Integer)

Dim rstTRANSFORM As Recordset

Dim fldLoop As Field

Dim booFirst As Boolean

qdfTemp.PARAMETERS!prmYear = intYear

Set rstTRANSFORM = qdfTemp.OpenRecordset()

Debug.Print qdfTemp.SQL

Debug.Print

Debug.Print , , "Quarter"

With rstTRANSFORM

booFirst = True

For Each fldLoop In .Fields

If booFirst = True Then

Debug.Print fldLoop.Name

Debug.Print , ;

booFirst = False

Else

Debug.Print , fldLoop.Name;

End If

Next fldLoop

Debug.Print

Do While Not .EOF

booFirst = True

For Each fldLoop In .Fields

If booFirst = True Then

Debug.Print fldLoop

Debug.Print , ;

booFirst = False

Else

Debug.Print , fldLoop;

End If

Next fldLoop

Debug.Print

.MoveNext

Loop

End With

End Function


UPDATE 语句示例

此示例对于所有当前的“ReportsTo”字段值为 2 的员工记录更改其“ReportsTo”字段值为 5。

Sub UpdateX()

Dim dbs As Database

Dim qdf As QueryDef

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对于当前所有 ReportsTo 字段值为 2 的员工记录

' 更改其 ReportsTo 字段值为 5。

dbs.Execute "UPDATE Employees " _

& "SET ReportsTo = 5 " _

& "WHERE ReportsTo = 2;"

dbs.Close

End Sub


UNION 运算示例

此示例捕获在巴西的所有供给商和客户的名字及城市。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub UnionX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 捕获在巴西所有供给商和客户的名字及城市。

Set rst = dbs.OpenRecordset("SELECT CompanyName," _

& " City FROM Suppliers" _

& " WHERE Country = 'Brazil' UNION" _

& " SELECT CompanyName, City FROM Customers" _

& " WHERE Country = 'Brazil';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 12

dbs.Close

End Sub


SQL 子查询示例

此示例列出每一客户的名称和 1995 第二季订单的联络人。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub SubQueryX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 列出每一客户的名称和

' 1995 第二季中订单的联络人。

Set rst = dbs.OpenRecordset("SELECT ContactName," _

& " CompanyName, ContactTitle, Phone" _

& " FROM Customers" _

& " WHERE CustomerID" _

& " IN (SELECT CustomerID FROM Orders" _

& " WHERE OrderDate Between #04/1/95#" _

& " And #07/1/95#);")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

'.

EnumFields rst, 25

dbs.Close

End Sub


Avg 函数示例

此示例使用订单表对那些运费超过 $100 的订单计算平均货运费。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub AvgX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对运费超过 $100 的订单，

' 计算其平均货运运费。

Set rst = dbs.OpenRecordset("SELECT Avg(Freight)" _

& " AS [Average Freight]" _

& " FROM Orders WHERE Freight > 100;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 25

dbs.Close

End Sub


Count 函数示例

此示例使用订单表计算已送货至英国的订单笔数。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub CountX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 计算已送货到英国的订单笔数。

Set rst = dbs.OpenRecordset("SELECT" _

& " Count (ShipCountry)" _

& " AS [UK Orders] FROM Orders" _

& " WHERE ShipCountry = 'UK';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 25

dbs.Close

End Sub


First、 Last 函数示例

此示例使用员工表返回第一笔和最后一笔记录之姓氏字段的值。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub FirstLastX1()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 从表返回第一笔和最后一笔记录

' 的姓氏字段的值。

Set rst = dbs.OpenRecordset("SELECT " _

& "First(LastName) as First, " _

& "Last(LastName) as Last FROM Employees;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 12

dbs.Close

End Sub

下一个示例简单地使用 Min 和 Max 函数来查找员工最早和最晚的生日日期，以比较 First 和 Last 函数的结果。

Sub FirstLastX2()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 查找员工最早的和最晚的生日日期。

Set rst = dbs.OpenRecordset("SELECT " _

& "First(BirthDate) as FirstBD, " _

& "Last(BirthDate) as LastBD FROM Employees;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 12

Debug.Print

' 查找员工最早和最晚的生日日期。

Set rst = dbs.OpenRecordset("SELECT " _
& "Min(BirthDate) as MinBD," _

& "Max(BirthDate) as MaxBD FROM Employees;")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 12

dbs.Close

End Sub


Min、Max 函数示例

此示例使用订单表对送货至英国的订单返回最低的和最高的货运运费。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub MinMaxX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对送货到英国的订单返回最低的和最高的

' 货运运费。

Set rst = dbs.OpenRecordset("SELECT " _

& "Min(Freight) AS [Low Freight], " _

& "Max(Freight)AS [High Freight] " _

& "FROM Orders WHERE ShipCountry = '英国';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 12

dbs.Close

End Sub


StDev、StDevP 函数示例

此示例使用订单表对送货至英国的订单估计货运运费的标准偏差。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub StDevX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对于送货到英国的订单，

' 计算货运运费的标准偏差。

Set rst = dbs.OpenRecordset("SELECT " _

& "StDev(Freight) " _

& "AS [Freight Deviation] FROM Orders " _

& "WHERE ShipCountry = 'UK';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 15

Debug.Print

Set rst = dbs.OpenRecordset("SELECT " _

& "StDevP(Freight) " _

& "AS [Freight DevP] FROM Orders " _

& "WHERE ShipCountry = 'UK';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 15

dbs.Close

End Sub


Sum 函数示例

此示例使用订单表计算对于送货至英国订单的合计销售额。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub SumX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 计算送货至英国订单的合计销售额。

Set rst = dbs.OpenRecordset("SELECT" _

& " Sum(UnitPrice*Quantity)" _

& " AS [Total UK Sales] FROM Orders" _

& " INNER JOIN [Order Details] ON" _

& " Orders.OrderID = [Order Details].OrderID" _

& " WHERE (ShipCountry = '英国');")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 15

dbs.Close

End Sub


Var、VarP 函数示例

此示例使用订单表估计对于送货至英国订单货运成本的方差。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub VarX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.MDB")

' 计算送货至英国订单的运费的方差。

Set rst = dbs.OpenRecordset("SELECT " _

& "Var(Freight) " _

& "AS [UK Freight Variance] " _

& "FROM Orders WHERE ShipCountry = '英国';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 20

Debug.Print

Set rst = dbs.OpenRecordset("SELECT " _

& "VarP(Freight) " _

& "AS [UK Freight VarianceP] " _

& "FROM Orders WHERE ShipCountry = '英国';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 20

dbs.Close

End Sub


Like 运算符示例

此示例返回员工名字以字母 A 到 D 开始的员工列表。

此示例调用 EnumFields 过程，且可以在 SELECT 语句示例中找到该过程。

Sub LikeX()

Dim dbs  As Database, rst  As Recordset

' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 返回员工名字以字母 A 到 D 开始的员工列表。

Set rst = dbs.OpenRecordset("SELECT LastName," _

& " FirstName FROM Employees" _

& " WHERE LastName Like '[A-D]*';")

'移居记录集。

rst.MoveLast

' 调用 EnumFields 来打印记录集的内容，

' 通过 Recordset 对象和需要的字段宽度。

EnumFields rst, 15

dbs.Close

End Sub


数据访问对象的自定义 Windows 注册表设置

注意   如果应用程序使用 Microsoft Jet 数据库引擎的缺省功能而不能正常工作，可能必须更改 Windows 注册表的设置来满足需要。Windows 注册表也可以用来调整可安装的 ISAM 和 ODBC 驱动程序的操作。

有三种方式可以用来修改 Windows 注册表的设置。第一种方法，可以简单使用 Regedit.exe 来改写 Microsoft Jet 数据库引擎注册时所创建的缺省设置。这种方法的灵活性最差，因为所有使用这个 Microsoft Jet 数据库引擎的应用程序都会有这些新的缺省设置。

修改 Windows 注册表设置的第二种方法是，在应用程序的注册树中创建一个 Microsoft Jet 部分来管理 Microsoft Jet 数据库引擎的设置。实现这件事的最简单方法是用 Regedit.exe 的“导入”和“导出”命令来导出存在的 Microsoft Jet 键，再把它导入您的应用程序的注册树。然后就可以改变想在新的注册树中指定的任何值。如果已经在 Engines 子文件夹中提供了任何值，当应用程序启动时，Microsoft Jet 会加载这些设置。任何没有输入客户应用程序注册树的值会从缺省设置中加载。

为了让应用程序加载 Windows 注册键的适当部分，必须使用 DAO 的 INIPath 属性来指定位置。在执行任何其它 DAO 代码之前，应用程序必须先设置 INIPath 属性。设置的范围只限于应用程序，并且要重新启动应用程序才能实现更改。

注意   虽然在应用程序注册表中创建 Microsoft Jet 部分比改写 Microsoft Jet 的缺省值项目更具灵活性，但仍然需要维护注册树。每一次更改缺省设置，必须编辑注册表。在 Microsoft Jet 的老版本中，修改注册表的策略只有这两个。

DAO 3.5 还提供一个修改缺省设置的新方法。现在，注册表设置可以在执行期间使用 SetOption 方法来修改。这是推荐的方法，用来对应用程序的注册表设置作细微调整。这个方法是最有灵活性的，且给开发者提供了对于更改注册表的最多的控制。SetOption 方法允许用户对下列设置指定新的值：

•	PageTimeout 键

•	SharedAsyncDelay 键

•	ExclusiveAsyncDelay 键

•	LockRetry 键

•	UserCommitSync 键

•	ImplicitCommitSync 键

•	MaxBufferSize 键

•	MaxLocksPerFile 键

•	LockDelay 键

•	RecycleLVs

•	FlushTransactionTimeout 键

通过使用 SetOption 方法，您对应用程序可得到最大的灵活性和控制。使用此法可创建较易维护且能调整到最大执行效率的应用程序。

也可以编辑 Windows 注册表来指定下列各项：

•	用来和 Microsoft FoxPro、Microsoft Excel、Lotus、Paradox、和 dBASE 数据库作交互的设置。请参阅初始化 Paradox 数据库的驱动程序、初始化 Microsoft FoxPro 数据库的驱动程序、初始化 Microsoft Excel 驱动程序、初始化 Lotus 驱动程序、和初始化 dBASE 数据库的驱动程序。

•	Microsoft ODBC 用来和 SQL 数据库交互的设置。请参阅初始化 Microsoft ODBC 数据库的驱动程序。

•	影响 Microsoft Jet 数据库引擎读入和保存数据的设置。请参阅初始化 Microsoft Jet 2.5 数据库引擎的驱动程序，和初始化 Microsoft Jet 3.5 数据库引擎的驱动程序。

•	用来控制 Microsoft Jet 数据库引擎如何和 Internet 与 Microsoft Exchange 交互的设置。请参阅初始化 HTML（Internet）Data Source 驱动程序和初始化 Microsoft Exchange Data Source 驱动程序。

•	用来控制 Microsoft Jet 数据库引擎如何和导入成常规文本的数据交互的设置。请参阅初始化 Text Data Source 的驱动程序。


初始化 dBASE 数据库的驱动程序

当安装 dBASE 数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM 格式子键写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下列的部分描述 dBASE 数据库驱动程序的初始化和 ISAM 格式设置。

dBASE 初始化设置

Jet\3.5\Engines\Xbase 文件夹包含用来访问外部 dBASE 数据源的 Msxbse35.dll 驱动程序的初始化设置。在文件夹中的项目的典型设置显示於下列示例。

win32=<path>\MSXBSE35.dll

NetworkAccess=On

PageTimeout=600

INFPath=C:\DBASE\SYSTEM

CollatingSequence=ASCII

DataCodePage=OEM

Deleted=On

Century=Off

Date=MDY

Mark=47

Exact=Off

Microsoft Jet 数据库引擎使用的 Xbase 文件夹项目如下。

项目	说明
win32	Msxbse35.dll 的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
NetworkAccess	文件锁定设置的二进制指示器。如果 Network Access 设为 00，表打开为独占方式访问，而不管 OpenDatabase 和 OpenRecordset 方法中 exclusive 参数的设置是多少。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在Windows NT 3.51 中是 REG_BINARY类型。
PageTimeout	数据从放到内部高速缓冲起到变成无效之间的时间长度。此数值以 100 毫秒为单位。缺省值是 600 个单位或 60 秒。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
INFPath	到 .inf 文件目录的完整路径。Microsoft Jet 数据库引擎首先在包含该表的目录中查找 .inf 文件。如果 .inf 文件不在数据库目录中，它会在 INFPath中查找。如果没有 INFPath，它会使用在数据库目录中找出的任意索引文件（.cdx 或 .mdx）。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。 此项目没有被安装过程写入。
CollatingSequence	使用 Microsoft Jet 数据库引擎创建或打开的所有 dBASE 表的排序序列。可能的值为 ASCII 和 International。缺省值是 ASCII。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
DataCodePage	如何存储文本页的指示器。可能的设置是： • OEM � 执行 OemToAnsi 和 AnsiToOem 转换。 • ANSI � 不执行 OemToAnsi 和 AnsiToOem 转换。 缺省值是 OEM。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Deleted	用以决定 Microsoft Jet 数据库引擎如何处理已标记为删除的记录的二进制指示器。01 值对应 dBASE 的 SET DELETED ON 命令，且指示 Microsoft Jet 不再检索或定位已删除的记录。00 值对应 dBASE 的 SET DELETED OFF 命令，且指示 Microsoft Jet 对待一个删除的记录像对待任何其它的记录一样。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Century	在 date-to-string 函数被使用在索引表达式的情况下，格式化日期的世纪部件 (century component) 的二进制指示器。01 的值对应 dBASE 的 SET CENTURY ON 命令，而 00 的值对应 dBASE 的 SET CENTURY OFF 命令。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Date	在索引表达式中使用 date-to-string 函数的情况下使用的日期格式化样式。此对应 dBASE 的 SET DATE 命令的项目，可能值为American、ANSI、British、French、DMY、German、Italian、Japan、MDY、USA、和 YMD。缺省值是 MDY。在 Windows 95 和Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Mark	用来分隔日期部分的 ASCII 字符的十进制值。缺省值取决于 Date 设置，如下列： • "/" (American, MDY) • "." (ANSI) • "/" (British, French, DMY) • "." (German) • "-" (Italian) • "/" (Japan, YMD) • "-" (USA) 0 值指示系统应该使用通常与选择的日期格式相关的分隔符。 缺省值是 0。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
Exact	字符串比较的二进制指示器。01 值对应 dBASE 的 SET EXACT ON 命令。00 值对应 dBASE 的 SET EXACT OFF 命令。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
dBASE ISAM 格式

Jet\3.5\ISAM Formats\dBASE III 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 和Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	dBASE III（*.dbf）
ImportFilter	REG_SZ	String	dBASE III（*.dbf）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	dBASE 索引（*.ndx）
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 dBASE III 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
'

Jet\3.5\ISAM Formats\dBASE IV 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	dBASE IV（*.dbf）
ImportFilter	REG_SZ	String	dBASE IV（*.dbf）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	dBASE 索引 （*.ndx；*.mdx）
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 dBASE IV 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\dBASE 5.x 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	dBASE 5（*.dbf）
ImportFilter	REG_SZ	String	dBASE 5（*.dbf）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	dBASE 索引（*.ndx；*.mdx）
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 dBASE 5 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Lotus 驱动程序

当安装 Lotus 数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM 格式子键写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下面部分描述 Lotus 数据库驱动程序的初始化和 ISAM Format 设置。

Lotus 初始化设置

Jet\3.5\Engines\Lotus 文件夹包含用来访问外部 Lotus 电子数据表的 Msltus35.dll 驱动程序的初始化设置。这个标题下项目的典型设置显示於下列示例。

win32=<path>\MSLTUS35.dll

TypeGuessRows=8

ImportMixedTypes=Text

AppendBlankRows=4

FirstRowHasNames=Yes

Microsoft Jet 数据库引擎使用如下的 Lotus 文件夹项目。

项目	描述
win32	Msltus35.dll 的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
TypeGuessRows	被检查数据类型的行数。根据在选择中最常被发现的数据类型来决定数据类型。如果有限制，将由下列顺序来决定数据类型：Number, Currency, Date, Text, Long Text 。如果遇到的数据不符合字段的推测的数据类型时，它会作为 Null 值返回。在导入时，如果一个字段有混合数据类型，整个字段将根据 ImportMixedTypes 设置来转换。 被检查的行数缺省值是 8。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
ImportMixedTypes	可以被设置成 Majority Type 或是 Text。如果设置成 Majority Type，混合数据类型的字段将会在导入时改变成占主导地位的数据类型。如果设置成 Text，混合数据类型的字段将在导入时改变成 Text 的数据类型。缺省值是 Text。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
AppendBlankRows	在增加新数据前，添加至 WK1 工作表末端的空白行数。例如，如果 AppendBlankRows 设置成 4，Microsoft Jet 将在增加包含数据的行之前添加 4 行空白至工作表末端。此设置的整型值范围从 0 到 16；缺省值是 01（追加一附加行）。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
FirstRowHasNames	指示表的第一行是否包含字段名的二进制值。01 的值指示在导入期间将从第一行取得字段名。00 值指示在第一行中没有字段名；字段名显示为 F1、F2、F3 等等。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Lotus ISAM 格式

Jet\3.5\ISAM Formats\Lotus WK1 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Lotus
ExportFilter	REG_SZ	String	Lotus 1-2-3 WK1（*.wk1）
ImportFilter	REG_SZ	String	Lotus 1-2-3（*.wk*；*.wj*）
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Lotus 1-2-3 Version 2 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\Lotus WK3 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Lotus
ExportFilter	REG_SZ	String	Lotus 1-2-3 WK3（*.wk3）
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Lotus 1-2-3 Version 3 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\Lotus WK4 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Lotus
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Microsoft Excel 驱动程序

当安装 Microsoft Excel 数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM 格式子键写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Microsoft Excel 数据库驱动程序的初始化和 ISAM Formats 设置。

Microsoft Excel 初始化设置

Jet\3.5\Engines\Excel 文件夹包含用来访问外部 Microsoft Excel 工作表的 Msexcl35.dll 驱动程序的初始化设置。文件夹中项目的典型设置显示於下列示例。

win32=<path>\MSEXCL35.dll

TypeGuessRows=8

ImportMixedTypes=Text

AppendBlankRows=1

FirstRowHasNames=Yes

Microsoft Jet 数据库引擎使用的 Excel 文件夹项目如下。

项目	描述
win32	Msexcl35.dll 的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
TypeGuessRows	被检查数据类型的行数。根据在选择中最常被发现的数据类型来决定数据类型。如果有限制，将由下列顺序来决定数据类型：Number, Currency, Date, Text, Long Text 。如果遇到的数据不符合字段的推测的数据类型时，它会作为 Null 值返回。在导入时，如果一个字段有混合数据类型，整个字段将根据 ImportMixedTypes 设置来转换。 被检查的行数缺省值是 8。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
ImportMixedTypes	可以被设置成 Majority Type 或是 Text。如果设置成 Majority Type，混合数据类型的字段将会在导入时改变成占主导地位的数据类型。如果设置成 Text，混合数据类型的字段将在导入时改变成 Text 的数据类型。缺省值是 Text。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
AppendBlankRows	在增加新数据前，添加至 3.5 版或 4.0 版工作表末端的空白行数。例如，如果 AppendBlankRows 设置成 4，Microsoft Jet 将在增加包含数据的行之前添加 4 行空白至工作表末端。此设置的整型值范围从 0 到 16；缺省值是 01（追加一附加行）。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
FirstRowHasNames	指示表的第一行是否包含字段名的二进制值。01 的值指示在导入期间将从第一行取得字段名。00 的值指示在第一行中没有字段名；字段名显示为 F1、F2、F3等等。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Microsoft Excel ISAM 格式

Jet\3.5\ISAM Formats\Excel 3.0 文件夹包含下列项目。

项目名称	Windows NT 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 3（*.xls）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft Excel 3.0 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。。
Jet\3.5\ISAM Formats\Excel 4.0 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 4（*.xls）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft Excel 4.0 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\Excel 5.0 文件夹包含下列项目，它们应用于 Microsoft Excel 5.0 和 7.0 版。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 5-7（*.xls）
ImportFilter	REG_SZ	String	Microsoft Excel（*.xls）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft Excel 5.0 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\Excel 8.0 文件夹包含下列项目，它们应用于 Microsoft Excel 97。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 97
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft Excel 97 的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Microsoft FoxPro 数据库的驱动程序

当安装 Microsoft FoxPro 数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM 格式子键写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Microsoft FoxPro 数据库驱动程序的初始化和 ISAM Format 设置。

Microsoft FoxPro 初始化设置

Jet\3.5\Engines\Xbase 文件夹包含用来访问外部 FoxPro 工作表的 Msxbse35.dll 驱动程序的初始化设置。文件夹中项目的典型设置显示於下列示例。

win32=<path>\MSXBSE35.dll

NetworkAccess=On

PageTimeout=600

INFPath=C:\DBASE\SYSTEM

CollatingSequence=ASCII

DataCodePage=OEM

Deleted=Off

Century=Off

Date=MDY

Mark=47

Exact=Off

The Microsoft Jet 数据库引擎使用如下的 Xbase 文件夹项目。

项目	说明
win32	Msxbse35.dll 的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
NetworkAccess	文件锁定首选项的二进制指示器。如果 Network Access 设为 00，表将被打开为独占访问，不管OpenDatabase 和 OpenRecordset 方法中 exclusive 参数的设置是多少。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
PageTimeout	从数据放在内部高速缓冲时起，到它变为无效之间的时间长度。此数值以 100 毫秒为单位。缺省值是 600 个单位或 60 秒。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
INFPath	到 .inf 文件目录的完整路径。Microsoft Jet 数据库引擎首先在包含该表的目录中查找 .inf 文件。如果 .inf 文件不在数据库目录中，它会在 INFPath中查找。如果没有 INFPath，它会使用在数据库目录中找出的任意索引文件（.cdx 或 .mdx）。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。 此项目没有被安装过程写入。
CollatingSequence	所有用 Microsoft Jet 数据库引擎创建或打开的 Microsoft FoxPro 表的排序序列。可能的值为 ASCII 和 International。缺省值是 ASCII。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
DataCodePage	如何存储文本页的指示器。可能的设置是： • OEM－执行 OemToAnsi 和 AnsiToOem 转换。 • ANSI—不执行 OemToAnsi 和 AnsiToOem转换。 缺省值是 OEM。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Deleted	用以决定 Microsoft Jet 数据库引擎如何处理已标记为删除的记录的二进制指示器。01 值对应 Microsoft FoxPro 的 SET DELETED ON 命令，且指示 Microsoft Jet 不再检索或定位已删除的记录。00 值对应 Microsoft FoxPro 的 SET DELETED OFF 命令，且指示 Microsoft Jet 对待一个删除的记录像对待任何其它的记录一样。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Century	在 date-to-string 函数被使用在索引表达式的情况下，格式化日期的世纪部件 (century)的二进制指示器。01 值对应 Microsoft FoxPro 的 SET CENTURY ON 命令，而 00 值对应 Microsoft FoxPro 的 SET CENTURY OFF 命令。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Date	在索引表达式中使用 date-to-string 函数的情况下，使用的日期格式化样式。此对应 Microsoft FoxPro 的 SET DATE 命令的项目，可能值为 American、ANSI、British、French、DMY、German、Italian、Japan、MDY、USA、和 YMD。缺省值是 MDY。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Mark	用来分隔日期的 ASCII 字符的十进制值。缺省值取决于 Date 设置。如下列： "/" (American, MDY) "." (ANSI) "/" (British, French, DMY) "." (German) "-" (Italian) "/" (Japan, YMD) "-" (USA) 0 值指示系统应该使用通常与被选择的日期格式相关联的分隔符。 缺省值是 0。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
Exact	字符串比较的二进制指示器。01 的值对应 Microsoft FoxPro 的 SET EXACT ON 命令。00 的值对应 Microsoft FoxPro 的 SET EXACT OFF 命令。缺省值是 00。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
FoxPro ISAM 格式

Jet\3.5\ISAM Formats\FoxPro 2.0 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 2.0（*.dbf）
ImportFilter	REG_SZ	String	Microsoft FoxPro（ *.dbf）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	FoxPro 索引（*.idx；*.cdx）
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft FoxPro 2.0 数据库。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\FoxPro 2.5 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 2.5（*.dbf）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	FoxPro 索引（*.idx；*.cdx）
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft FoxPro 2.5 数据库。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\FoxPro 2.6 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 2.6（*.dbf）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	FoxPro 索引（*.idx；*.cdx）
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft FoxPro 2.6 数据库。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\FoxPro 3.0 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 3.0（*.dbf）
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft FoxPro 3.0 数据库。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\FoxPro DBC 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 3.0（*.dbc）
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Microsoft Jet 2.5 数据库引擎的驱动程序

当安装 Microsoft Jet 2.5 引擎数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM Formats 子键写入一些缺省值。不应直接修改这些设置；而应使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Microsoft Jet 2.5 引擎数据库驱动程序的初始化和 ISAM Formats 设置。

注意…在Jet\3.5\Engines\Jet 2.x 文件夹中，安装过程只写一个设置值（win32）至；这是此文件夹中唯一有效的设置。

Microsoft Jet 引擎初始化设置

Jet\3.5\Engines\Jet 2.x 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	缺省值t
PageTimeOut	REG_DWORD	Integer	5
LockedPageTimeOut	REG_DWORD	Integer	5
LockRetry	REG_DWORD	Integer	20
CommitLockRetry	REG_DWORD	Integer	20
CursorTimeout	REG_DWORD	Integer	5
IdleFrequency	REG_DWORD	Integer	10
ForceOSFlush	REG_DWORD	Integer	0
MaxBufferSize	REG_DWORD	Integer	512
ReadAheadPages	REG_DWORD	Integer	8
Microsoft Jet 数据库引擎使用下列项目来决定数据库引擎驱动程序的路径。

项目	说明
win32	数据库引擎驱动程序（ dll）的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Microsoft Jet 数据库引擎附加的初始化设置包含在 Jet\3.5\Engines\Jet 2.x 文件夹中。

Jet\3.5\Engines\Jet 2.x\ISAM 文件夹项目的典型设置显示於下列示例。

PageTimeout=5

LockedPageTimeout=5

CursorTimeout=5

LockRetry=20

CommitLockRetry=20

MaxBufferSize=512

ReadAheadPages=16

IdleFrequency=10

ForceOsFlush = 0

下列项目用来配置 Microsoft Jet 数据库引擎。

项目	描述
PageTimeout	非读入锁定的数据从放入内部高速缓冲起到它变为无效之间的时间长度，以 100 毫秒为单位。缺省值是 5 个单位（或 0.5 秒）。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
LockedPageTimeout	读入锁定的数据从放入内部高速缓冲起到它变为无效之间的时间长度，以 100 毫秒为单位。缺省值是 5 个单位（或 0.5 秒）。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
CursorTimeout	对于页的引用保留在该页上的时间长度，以 100 毫秒为单位。缺省值是 5 个单位（或 0.5 秒）。此设置只应用在 Microsoft Jet 数据库引擎 1.x 版创建的数据库上。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
LockRetry	在返回锁定冲突消息之前，重复地试着访问一锁定页的次数。缺省值是 20 次；LockRetry 和 CommitLockRetry 有关。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
CommitLockRetry	Microsoft Jet 数据库引擎为了交付对于数据的更改而尝试获得那个数据的锁定的次数。如果 Microsoft Jet 数据库引擎不能获得交付锁定，对于那个数据的更改将会失败。 Microsoft Jet 数据库引擎尝试获得交付锁定的次数和 LockRetry 值直接有关。对于获得交付锁定的每一次尝试，Microsoft Jet 数据库引擎将做 LockRetry 值所指定的次数的获得锁定的尝试。例如，如果 CommitLockRetry 设成 20 且 LockRetry 设成 20，则 Microsoft Jet 数据库引擎将为获得交付锁定做 20 次尝试；在每一次尝试中，Microsoft Jet 数据库引擎为获得锁定又要做 20 次尝试，总共尝试 400 次。 CommitLockRetry 的缺省值是 20。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是REG_DWORD 类型。
MaxBufferSize	数据库引擎内部高速缓冲的大小，以一千字节（K）为单位。MaxBufferSize 必须是大于等于 9 小于等于 4096 的整型值。缺省值是 512。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
ReadAheadPages	执行循序扫描时预先读入的页数。缺省值是 16。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
ForceOSFlush	0 以外的任何设置，表示一个交付或写入，强制刷新操作系统高速缓冲至磁盘。0（缺省值）的设置表示没有强制刷新发生。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在Windows NT 3.51 中是 REG_DWORD 类型。
IdleFrequency	在释放一个读入锁定之前，Microsoft Jet 将等待的时间，以100 毫秒为单位。缺省值是 10 个单位或一秒。在 Windows 95 和 Windows NT 4.0 中的值是DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
Microsoft Jet 引擎 ISAM 格式

Jet\3.5\ISAM Formats\Jet 2.x 文件夹包含下列项目。

项目	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Jet 2.x
OneTablePerFile	REG_BINARY	Binary	00
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	0
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Microsoft Jet 3.5 数据库引擎的驱动程序

下列部分描述 Microsoft Jet 3.5 数据库引擎的初始化设置。

当 MSJET35.DLL 和 MSRD2X35.DLL 注册时，会有两个项目写入 \HKEY_LOCAL_MACHINES\Software\Microsoft\Jet\3.5\Engines 文件夹。安装 Microsoft Access 97 时，这会自动执行。此两个项目为：

SystemDB = <path>\System.mdb

CompactBYPkey = 1

Microsoft Jet 数据库引擎使用下列项目。

项目	描述
SystemDB	指定工作组信息文件的完整路径和文件名。缺省值是适当路径后面跟随着文件名 System.mdb。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
CompactByPKey	指定当压缩以主键顺序复制而成的表时，在表上是否存在主键。如果没有主键存在表上，表就以基本表的顺序复制。 0 值指示应该以基本表的顺序压缩；非零值指示如果主键存在，表应该以主键顺序压缩。缺省值是非零值。在 Windows 95 和 Windows NT 4.0 中的值是DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。 注意   此设置只应用于压缩 Microsoft Jet 数据库引擎 3.0 或之后的版本所创建的数据库；当您压缩由 2.x 版Microsoft Jet 数据库引擎所创建的数据库，数据总是以基本表的顺序复制。
Microsoft Jet 引擎初始化设置

注册 Microsoft Jet 也会在 \HKEY_LOCAL_MACHINES\Software\Microsoft\Jet\3.5\Engines\Jet 3.5 文件夹创建下列项目。

Jet\3.5\Engines\Jet 3.5 文件夹项目的典型设置显示於下列示例。

FlushTransactionTimeout=500

LockDelay=100

LockRetry=20

MaxBufferSize= 0

MaxLocksPerFile= 9500

PageTimeout=5000

Threads=3

UserCommitSync=Yes

ImplicitCommitSync=No

ExclusiveAsyncDelay=2000

SharedAsyncDelay=0

Microsoft Jet 数据库引擎使用下列项目。

项目	描述
PageTimeout	非读入锁定的数据从放入内部高速缓冲起到它变为无效之间的时间长度，以毫秒为单位。缺省值是 5000 毫秒或 5 秒。在Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
FlushTransactionTimeout	此项目禁止 ExclusiveAsyncDelay 和 SharedAsyncDelay 注册表项。若要使这两项目有效，必须输入零值。FlushTransactionTimeout 更改 Microsoft Jet 数据库引擎往数据库文件中异步写入的方法。从前，Microsoft Jet 数据库引擎使用 ExclusiveAsyncDelay 或 SharedAsyncDelay 来决定在强制异步写入前，要等待多久。然而，现在 FlushTransactionTimeout 改变了这种情况，因为 FlushTransactionTimeout 有一个值，它只在指定的时间量被超出之后，并且没有页添加至高速缓冲的条件下，会启动异步写入。唯一的例外是，如果高速缓冲超出了 MaxBufferSize，在那一点上高速缓冲会启动异步写入，而不管时间是否已经超过。因此 Microsoft Jet 3.5 数据库引擎在启动异步写入前将非活动地等待 500 毫秒，或等到高速缓冲大小已被超出。
LockDelay	此设置可和 LockRetry 设置联合工作，它会使每一个 LockRetry 在发出另一个锁定请求前等待 100 毫秒。添加 LockDelay 设置是为了防止某些网络操作系统会发生的“激增”现象。
MaxLocksPerFile	此设置防止 Microsoft Jet 的处理超出指定值。如果处理中的锁定企图超出此值，处理将分裂成两个或更多个部分且部分地交付。添加该设置来防止当超出指定的 Netware 锁定限制时，Netware 3.1 服务器会发生的毁损，及改善 Netware 和 NT 的性能。
LockRetry	在返回锁定冲突消息之前，重复尝试访问一锁定页的次数。缺省值是 20。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
RecycleLVs	此设置为有效时将使 Microsoft Jet 循环利用 long 值 （LV） 页 （Memo, Long Binary [OLE对象]、和 Binary 数据类型） 。在最后一个用户关闭数据库之前，Microsoft Jet 3.0 不循环利用这些类型的页。如果 RecyleLVs 设置为有效，当追加数据库时（即，当添加几个页的组时），Microsoft Jet 3.5 将开始循环利用大部分的 LV 页。 注意   使用此特性时，用户会注意到处理 long 值数据时的性能下降。 Microsoft Access 97在操作模块、窗体以及报告时会自动启动和禁止该特性，因此在修改这些对象时不需要打开此项目。缺省值是 0。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
MaxBufferSize	数据库引擎内部高速缓存的大小，以一千字节（K）为单位。MaxBufferSize 必须是大于等于 512 的整型值。缺省值根据下列公式： ((TotalRAM in MB - 12 MB) / 4) + 512 KB 例如，在有 32 MB RAM 的系统上，缺省缓冲区大小是((32 MB - 12 MB) / 4) + 512 KB 或 5632 KB。若要将值设为缺省值，请设置注册键为 MaxBufferSize= 在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
Threads	Microsoft Jet 数据库引擎可用的背景线程数。缺省值是 3。对于 Windows 95 和 Windows NT 4.0，值是 DWORD 类型，而对于 Windows NT 3.51 是 REG_DWORD 类型。
UserCommitSync	指定系统是否等待交付完成。值为Yes，命令系统等待；而 No 则命令系统执行异步交付。缺省值为 Yes。对于 Windows 95 和 Windows NT 4.0，值是字符串类型，而对于 Windows NT 3.51 是 REG_SZ 类型。
ImplicitCommitSync	指定系统是否等待交付完成。No，命令系统不要等待交付完成而继续；Yes则命令系统等待交付完成。缺省值为 No。对于 Windows 95 和 Windows NT 4.0，值是字符串类型，而对于 Windows NT 3.51 是 REG_SZ 类型。
ExclusiveAsyncDelay	指定延迟独占数据库的异步刷新的时间长度，以毫秒为单位。缺省值是 2000 或 2 秒。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
SharedAsyncDelay	指定延迟共享数据库的异步刷新的时间长度，以毫秒为单位。缺省值是 0。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
Microsoft Jet 引擎 ISAM 格式

Jet\3.5\ISAM Formats 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Jet 3.5
ExportFilter	REG_SZ	String	Microsoft Access （*.mdb）
ImportFilter	REG_SZ	String	Microsoft Access （*.mdb）
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Microsoft Access 数据库。如果导入已存在的文件，这次处理将改写已存在的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


为ODBC 访问配置 Microsoft Jet 数据库引擎

下列部分描述为与 ODBC 数据库连接的 Microsoft Jet 数据库引擎的 Windows 注册表设置。

与 Microsoft Jet 连接的 ODBC 数据库的初始化设置

\HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\Engines\ODBC 文件夹包含 Microsoft Jet 数据库引擎的初始化设置。

注意   Jet\3.5\Engines\ODBC 文件夹中项目的典型设置示於下列示例。

LoginTimeout=20

QueryTimeout=60

ConnectionTimeout=600

AsyncRetryInterval=500

AttachCaseSensitive=0

AttachableObjects='TABLE','VIEW','SYSTEM TABLE','ALIAS','SYNONYM'

SnapshotOnly=0

TraceSQLMode=0

TraceODBCAPI=0

DisableAsync=1

JetTryAuth=1

PreparedInsert=0

PreparedUpdate=0

FastRequery=0

Microsoft Jet 数据库引擎使用如下的 ODBC 文件夹项目。

项目	描述
LoginTimeout	在超时前登录的尝试可以继续的秒数。缺省值是 20（为 REG_DWORD 类型）。
QueryTimeout	在超时前，一个查询可以运行的秒数（总的处理时间）。如果 DisableAsync = 0 （缺省值） ，则 QueryTimeout 为在轮询查询完成之间等待来自服务器的响应的秒数。缺省值是 60（值是 REG_DWORD 类型）。
ConnectionTimeout	在超时前，高速缓存的连接可以保持闲置的秒数。缺省值是 60（为 REG_DWORD 类型）。
AsyncRetryInterval	判断服务器是否正在执行查询的轮询之间的毫秒数。此项目只用于异步处理。缺省值是 500（为REG_DWORD 类型）。
AttachCaseSensitive	在链接时是否准确符合表名称的指示器。值为 0（链接到符合指定名称的第一个表，不区分大小写）和 1（只有当名称完全符合时才链接表）。缺省值是 0（值是 REG_DWORD 类型）。
AttachableObjects	允许链接的服务器对象类型的列表。缺省值是：‘TABLE’、‘VIEW’、‘SYSTEM TABLE’、‘ALIAS’、‘SYNONYM’（值为 REG_SZ 类型）。
SnapshotOnly	指示是否强制 Recordset 对象为快照类型。值是 0（允许为动态集）和 1（强制为快照）。缺省值是 0（值是 REG_DWORD 类型）。
TraceSQLMode	指示 Microsoft Jet 数据库引擎是否跟踪送至在SQLOUT.txt 中的 ODBC 数据源的 SQL 语句。值是 0（否）和 1（是）。缺省值是 0（为 REG_DWORD 类型）。此项目可和 SQLTraceMode 交互改变的。
TraceODBCAPI	指示是否跟踪 ODBCAPI.txt 中的 ODBC API 调用。值是 0（否）和 1（是）。缺省值是 0 （为REG_DWORD 类型）。
DisableAsync	指示是否强制执行同步查询。值是 0 （如果可能则执行异步查询） 和 1 （强制执行同步查询）。缺省值是 1 （为 REG_DWORD 类型）。
JetTryAuth	指示在出现提示之前是否试着使用 Microsoft Access 用户名称和密码来登录服务器。值是 0（否）和 1（是）。缺省值是 1（为 REG_DWORD 类型）。
PreparedInsert	指示是否使用预先准备的可在所有列中插入数据的INSERT 语句。值是 0 （使用只插入非 Null 值的自定义的 INSERT 语句）和 1 （使用预先准备的 INSERT 语句）。缺省值是 0 （为 REG_DWORD 类型）。 使用预先准备的 INSERT 语句可能使 Nulls 改写服务器缺省值，且可能在没有准确插入的列上触发执行。
PreparedUpdate	指示是否使用预先准备的 UPDATE 语句更新所有列的数据。值是 0 （使用只设置已经改变的列的自定义 UPDATE 语句）和 1 （使用预先准备的 UPDATE 语句）。缺省值是 0 （值是 REG_DWORD 类型）。 使用预先准备的 UPDATE 语句可能会在没有更改的列上触发执行。
FastRequery	指示是否使用预先准备的参数化查询的 SELECT 语句。值是 0 （否）和 1 （是）。缺省值是 0 （值是 REG_DWORD 类型）。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Paradox 数据库的驱动程序

当安装 Paradox 数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM Formats子键写入一些缺省值。不应直接修改这些设置（除非必要）；而应使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Paradox 数据库驱动程序的初始化和 ISAM Formats 设置。

Paradox 初始化设置

Jet\3.5\Engines\Paradox 文件夹包含用来访问外部 Paradox 数据的 Mspdox35.dll 驱动程序的初始化设置。文件夹中项目的典型设置显示於下列示例。

win32=<path>\MSPDOX35.dll

PageTimeout=600

CollatingSequence=ASCII

DataCodePage=OEM

ParadoxUserName=Kimberly

ParadoxNetPath=P:\PDOXDB

ParadoxNetStyle=4.X

Microsoft Jet 数据库引擎使用如下的 Paradox 文件夹项目。

项目	说明
win32	Mspdox35.dll 的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
PageTimeout	数据从放入内部高速缓冲起到它变为无效之间的时间长度，此数值以 100 毫秒为单位。缺省值是 600 个单位或 60 秒。在 Windows 95 和 Windows NT 4.0 中的值是DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
CollatingSequence	所有使用 Microsoft Jet 数据库引擎创建或打开的 Paradox 表的排序序列。可能的值为 ASCII、International、Norwegian-Danish、和Swedish-Finnish。CollatingSequence 项目必须符合 Paradox 表创建时使用的排序序列。缺省值是 ASCII。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
DataCodePage	如何存储文本页的指示器。可能的设置是： • OEM � 进行 OemToAnsi 和 AnsiToOem 转换。 • ANSI � 不进行 OemToAnsi 和 AnsiToOem 转换。 缺省值是 OEM。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
ParadoxUserName�	如果一个表被 Paradox ISAM 锁定，并且访问Paradox（不是 ISAM ）数据的交互用户企图放置不兼容的锁定时，Paradox 将显示的名称。如果计算机不在网络上，则不添加此项。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。 注意   如果指示 ParadoxUserName，必须同时指定ParadoxNetPath 和 ParadoxNetStyle，否则当您试图访问外部 Paradox 数据时将收到一个错误。如果在网络上以多用户方式访问 Paradox 数据库，则必须用手工添加或修改这个注册表项。
ParadoxNetPath	包含 PARADOX.NET 文件（Paradox 3.x 版）或 PDOXUSRS.NET 文件（Paradox 4.x 版）的目录的完整路径。如果计算机不在网络上，则不添加该项目。通常必须更改这个初始设置（由设置程序添加），这个初始设置可能是对文件所在处的最佳的猜测。对所有共享一个特定数据库（目录）的用户来说，完整的 ParadoxNetPath（包括驱动器字母） 必须一致。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。 注意   如果指示 ParadoxNetPath，必须同时指定 ParadoxUserName 和 ParadoxNetStyle，否则当您试图访问外部 Paradox 数据时将收到一个错误。如果在网络上以多用户方式访问 Paradox 数据库，则必须用手工添加或修改这个注册表项。
ParadoxNetStyle	当访问 Paradox 数据时所使用的网络访问形式。可能的值为： • 3.x • 4.x 注意   Paradox 3.x 的用户不能将此设置为 4.x 否则驱动程序将使用错误的锁定方法。Paradox 5.0 的用户必须使用 4.x ParadoxNetStyle 的设置来确定适当的锁定行为。 如果计算机不在网络上，则不添加此项。此项目应该对应组中的用户所使用的 Paradox 版本。对所有共享一个特定数据库（目录）的用户来说，它必须一致。缺省值是 4.x。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。 注意   如果指示 ParadoxNetStyle，必须同时指定 ParadoxNetPath 和 ParadoxUserName ，否则当您试图访问外部 Paradox 数据时将收到一个错误。
Paradox ISAM Formats

Jet\3.5\ISAM Formats\Paradox 3.x 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Paradox
ExportFilter	REG_SZ	String	Paradox 3（*.db）
ImportFilter	REG_SZ	String	Paradox（*.db）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Paradox 3 版的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\Paradox 4.x 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Paradox
ExportFilter	REG_SZ	String	Paradox 4（*.db）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Paradox 4 版的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
Jet\3.5\ISAM Formats\Paradox 5.x 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Paradox
ExportFilter	REG_SZ	String	Paradox 5（*.db）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	从当前数据库将数据导入 Paradox 5 版的文件。如果导入已存在的文件，这次处理将改写已存在的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Text Data Source 的驱动程序

当安装 Text Data Source 数据库驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM Formats子键中写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Text Data Source 数据库驱动程序的初始化和 ISAM Formats 设置。

Text Data Source 的初始化设置

Jet\3.5\Engines\Text 文件夹包含用来外部访问文本数据文件的 Mstext35.dll 驱动程序的初始化设置。这个文件夹中项目的典型设置显示於下列示例。

win32=<path>\MSTEXT35.dll

MaxScanRows=25

FirstRowHasNames=True

CharacterSet=OEM

Format=CSVDelimited

Extensions=none,asc,csv,tab,txt

ExportCurrencySymbols=Yes

Microsoft Jet 数据库引擎使用如下的 Paradox 文件夹项目。

项目	说明
win32	Mstext35.dll 的位置。完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
MaxScanRows	当猜测字段类型时被扫描的行数。如果设成 0，整个文件将被搜寻。缺省值是 25。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
FirstRowHasNames	指示表的第一行是否包含字段名的二进制值。01 值指示在导入期间字段名将从第一行来取得。00 的值指示在第一行中没有字段名。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
CharacterSet	如何存储文本页的指示器。可能的设置是： • OEM — 执行 OemToAnsi 和 AnsiToOem 转换。 • ANSI — 不执行 OemToAnsi 和 AnsiToOem 转换。 OEM 为缺省值。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Format	可为下列任一值：TabDelimited、CSVDelimited、Delimited（＜单一字符＞）。在 Delimited 格式下的单一字符分隔符可以是除了双引号以外 (") 的任何单一字符。缺省值是 CSVDelimited。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Extensions	当要找寻基于文本的数据时，供浏览的文件的扩展名。缺省值是 txt、csv、tab 和 asc。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
ExportCurrencySymbols	指示当货币字段导出时是否包含相应的货币符号的二进制值。01 的值指示将包含符号。00 的值指示只导出数值数据。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
Text Data Source ISAM 格式

Jet\3.5\ISAM Formats\Text 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Text
ExportFilter	REG_SZ	String	Text Files（*.txt；*.csv；*.tab；*.asc）
ImportFilter	REG_SZ	String	Text Files（*.txt；*.csv；*.tab；*.asc）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	2
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
ResultTextExport	REG_SZ	String	从当前数据库将数据导入正文文件。如果导入已存在的文件，这次处理将改写已存在的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。

自定义 Schema.ini 文件

若要读入、导入、或导出文本数据，在 .ini 文件中除了包含文本 ISAM 信息以外，还需要创建一个 Schema.ini 文件。Schema.ini 包含文本数据源的特性：正文文件如何格式化、在导入时如何读入、和文件的缺省导出格式。下列示例显示定宽文件 Filename.txt 的版面设计。

[Filename.txt]

ColNameHeader=False

Format=FixedLength

MaxScanRows=25

CharacterSet=OEM

Col1=columnname Char Width 24

Col2=columnname2 Date Width 9

Col3=columnname7 Float Width 10

Col4=columnname8 Integer Width 10

Col5=columnname9 LongChar Width 10

类似地，分隔文件的格式指定如下：

[Delimit.txt]

ColNameHeader=True

Format=Delimited(!)

MaxScanRows=0

CharacterSet=OEM

Col1=username char width 50

Col2=dateofbirth Date width 9

如果将数据导入分隔的正文文件，该文件的格式同样指定为：

[Export: My Special Export]

ColNameHeader=True

Format=TabDelimited

MaxScanRows=25

CharacterSet=OEM

DateTimeFormat=mm.dd.yy.hh.mm.ss

CurrencySymbol=Dm

CurrencyPosFormat=0

CurrencyDigits=2

CurrencyNegFormat=0

CurrencyThousandSymbol=,

CurrencyDecimalSymbol=.

DecimalSymbol=,

NumberDigits=2

NumberLeadingZeros=0

My Special Export 示例引用了一个特定的导出选项；可以在连接时指定导出选项的任何变化。最后一个示例也对应于一个数据源名 (DSN) ，这个数据源名 (DSN) 可在连接时有选择地传送。所有三种格式部分均可包含在一个 .ini 文件中。

Microsoft Jet 数据库引擎使用如下的 Schema.ini 项目。

项目	说明
ColNameHeader	可设置为 True （表示数据的第一个记录为字段名）或 False。
Format	可为下列任一值：TabDelimited、CSVDelimited、Delimited（＜单一字符＞）。在 Delimited 格式下的单一字符分隔符可以是除了双引号以外 (") 的任何单一字符。
MaxScanRows	当猜测字段类型时被扫描的行数。如果设成 0，整个文件将被搜寻。
CharacterSet	可设置为 OEM 或 ANSI，指示是否用 OEM 或 ANSI 代码页来写源文件。
DateTimeFormat	可设置为指示日期和时间的格式字符串。如果在导入／导出中所有的日期／时间字段使用同样的格式来处理，就应当指定此项。除了 AM 和 PM 外，所有 Microsoft Jet 数据库引擎格式都被支持。格式字符串不存在时，就使用 Windows“控制面板”的短日期图片和时间选项。
CurrencySymbol	指示正文文件中货币值使用的的货币符号。示例中包含的美元符号 ($) 和 Dm。如果此项目不存在，将使用 Windows“控制面板”的缺省值。
CurrencyPosFormat	可设置为下列任一值： 货币符号在前且没有分隔（＄1） 货币符号在后且没有分隔（1＄） 货币符号在前且有一分隔符（＄ 1） 货币符号在后且有一分隔符（1 ＄） 如果此项目不存在，将使用 Windows“控制面板”的缺省值。
CurrencyDigits	指定用来作货币量小数部分的十进制数。如果此项目不存在，将使用 Windows “控制面板”的缺省值。
CurrencyNegFormat	可设置为下列值之一： ($1) -$1 $-1 $1- (1$) -1$ 1-$ 1$- -1 $ -$ 1 1 $- $ 1- $ -1 1- $ ($ 1) (1 $) 此示例的目的为显示美元符号，但是在实际程序之中，它应被相应的 CurrencySymbol 值取代。如果此项目不存在，将使用 Windows “控制面板”的缺省值。
CurrencyThousandSymbol	指示在正文文件中使用哪一个字符符号来分隔货币值的千位。如果此项目不存在，将使用 Windows “控制面板”的缺省值。
CurrencyDecimalSymbol	可以设置任一字符来分隔货币量的整数与小数部分。如果此项目不存在，将使用 Windows “控制面板”的缺省值。
DecimalSymbol	可以设置任一字符来分隔一个数的整数与小数部分。如果此项目不存在，将使用 Windows“控制面板”的缺省值。
NumberDigits	指示一个数的小数部分的十进制数。如果此项目不存在，将使用 Windows“控制面板”的缺省值。
NumberLeadingZeros	指定一个小于 1 而且大于 -1 的十进制数是否应该包含前导零；此值可为 False （没有前导零）或 True。
Col1, Col2, ...	列出正文文件中被读入的字段。此项的格式为： Coln=columnName type [Width #] columnName：嵌有空格的字段名应括在括号中。 Type：可以是 Bit、Byte、Short、Long、Currency、Single、Double、DateTime、Text、或 Memo。 除此之外，还支持下列 ODBC 文本驱动程序类型： Char（同 Text） Float（同 Double） Integer（同 Short） LongChar（同 Memo） Date 日期格式
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 HTML（Internet）Data Source 驱动程序

当安装 HTML 数据源数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM Formats子键中写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 HTML 数据源数据库驱动程序的初始化和 ISAM Formats 设置。

HTML 数据源初始化设置

Jet\3.5\Engines\Text 文件夹包含了 Mstext35.dll 驱动程序的初始化设置，这个 Mstext35.dll 驱动程序是用来外部访问存储在 HTML 文件内部的表的。在这个文件夹中的项目的典型设置显示於下列示例。

win32=<path>\MSTEXT35.dll

MaxScanRows=25

FirstRowHasNames=False

CharacterSet=OEM

Format=TabDelimited

Extensions=none,asc,csv,tab,txt

ExportCurrencySymbols=Yes

Microsoft Jet 数据库引擎使用如下的文本文件夹项目。

项目	说明
win32	Mstext35.dll 的位置。这个完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
MaxScanRows	当猜测字段类型时被扫描的行数。如果设成 0，整个文件将被搜寻。缺省值为 25。在 Windows 95 和 Windows NT 4.0 中的值是 DWORD 类型，而在 Windows NT 3.51 中是 REG_DWORD 类型。
FirstRowHas Names	指示表的第一行是否包含字段名的二进制值。01 值指示导入期间字段名可从第一行取得。00 值指示在第一行中没有字段名。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
CharacterSet	如何存储文本页的指示器。可能的设置是： • OEM — 执行 OemToAnsi 和AnsiToOem 转换。 • ANSI — 不执行 OemToAnsi 和AnsiToOem 转换。 OEM 为缺省值。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Format	可为下列任一值：TabDelimited、CSVDelimited、Delimited（＜单一字符＞）。在 Delimited 格式下的单一字符分隔符可以是除了双引号以外 (") 的任何单一字符。缺省值是 CSVDelimited。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
Extensions	当要找寻基于文本的数据时，供浏览的文件的扩展名。缺省值是 txt、csv、tab 和 asc。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。
ExportCurrencySymbols	指示当货币字段导出时是否包含相应的货币符号的二进制值。01 的值指示将包含符号。00 的值指示只导出数值数据。缺省值是 01。在 Windows 95 和 Windows NT 4.0 中的值是二进制类型，而在 Windows NT 3.51 中是 REG_BINARY 类型。
HTML 导入 ISAM 格式

Jet\3.5\ISAM Formats\HTML Import 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Text
ImportFilter	REG_SZ	String	HTML 文件（*.ht*）
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	2
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	从外部文件将数据导入当前数据库。对当前数据库中数据的更改将不会更改外部文件中的数据。
ResultTextLink	REG_SZ	String	在链接到外部文件的当前数据库中创建一个表。更改当前数据库中的数据时将会更改外部文件中的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。

HTML 导出 ISAM 格式

Jet\3.5\ISAM Formats\HTML Export 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Text
ExportFilter	REG_SZ	String	HTML 文件（*.htm）
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	2
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	从当前数据库将数据导入正文文件。如果导入已存在的文件，这次处理将改写已存在的数据。
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


初始化 Microsoft Exchange Data Source 驱动程序

当安装 Microsoft Exchange Data Source 数据库的驱动程序时，设置程序会在引擎的 Windows 注册表和 ISAM Formats子键中写入一些缺省值。不要直接修改这些设置；请使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Microsoft Exchange Data Source 数据库驱动程序的初始化和 ISAM Formats 设置。

Microsoft Exchange Data Source 初始化设置

Jet\3.5\Engines\Exchange 文件夹包含了 Mstext35.dll 驱动程序的初始化设置，这个 Mstext35.dll 驱动程序是用来外部访问 Microsoft Exchange 文件夹的 。在这个文件夹中的项目的典型设置显示於下列示例。

win32=<path>\MSEXCH35.dll

Microsoft Jet 数据库引擎使用 Exchange 文件夹来指示 Msexch35.dll 的位置。其完整路径在安装时就已确定。在 Windows 95 和 Windows NT 4.0 中的值是字符串类型，而在 Windows NT 3.51 中是 REG_SZ 类型。

Microsoft Exchange ISAM 格式

Jet\3.5\ISAM Formats\Exchange 4.0 文件夹包含下列项目。

项目名称	Windows NT 3.51 类型	Windows 95 and Windows NT 4.0 类型	值
Engine	REG_SZ	String	Exchange
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
注意   当更改 Windows 注册表设置时，要使新设置生效，必须先退出，然后重新激活数据库引擎。


IN

IN 关键字被使用在这些上下文之中：

In 运算符

IN 子句

SQL 子查询

TRANSFORM 语句


ON

ON 关键字被使用在这些上下文之中：

INNER JOIN 运算

LEFT JOIN 和 RIGHT JOIN 运算


ALL

ALL 关键字被使用在这些上下文之中：

ALL、DISTINCT、DISTINCTROW、TOP 谓词

SQL 子查询

UNION 运算


ASC/DESC

ASC 及 DESC 关键字被使用在这些上下文之中：

CREATE INDEX 语句

ORDER BY 子句


BY

BY 关键字被使用在这些上下文之中：

GROUP BY 子句

ORDER BY 子句


CREATE

CREATE 关键字被使用在这些上下文之中：

CREATE INDEX 语句

CREATE TABLE 语句


DROP

DROP 关键字被使用在这些上下文之中：

ALTER TABLE 语句

DROP 语句


INDEX

INDEX 关键字被使用在这些上下文之中：

CREATE INDEX 语句

DROP 语句


INTO

INTO 关键字被使用在这些上下文之中：

INSERT INTO 语句

SELECT...INTO 语句


JOIN

JOIN 关键字被使用在这些上下文之中：

INNER JOIN 运算

LEFT JOIN 和 RIGHT JOIN 运算


SELECT

SELECT 关键字被使用在这些上下文之中：

SELECT 语句

SELECT...INTO 语句


TABLE

TABLE 关键字被使用在这些上下文之中：

ALTER TABLE 语句

CREATE INDEX 语句

CREATE TABLE 语句

DROP 语句

UNION 运算


WITH

WITH 关键字被使用在这些上下文之中：

CREATE INDEX 语句

WITH OWNERACCESS OPTION 声明