1

以下文章是否适用于 JET 的所有使用(包括通过 DAO 或 OLEDB 在客户端应用程序中使用):

http://support.microsoft.com/kb/275058

这是否意味着 JET 4.0 或更高版本对于涉及 Access MDB 的任何事情都是必需的?

4

3 回答 3

2

不幸的是,知识库文章措辞不佳。他们引用的 SQL 92 语法是当您在 OUTER 连接的 ON 子句中添加非列比较过滤器时(这也意味着它在 QBE 中不可见)。因此,与查询中的表进行标准列比较的标准外连接(左或右)在所有版本的 Jet 中都可以正常工作。当您尝试在 OUTER 连接的 ON 子句中添加列比较过滤器以外的内容(例如 [Col] > 200)时,Access 无法正确解释 SQL 语句。

我个人遇到过这个问题,简而言之,仅仅因为它是标准 SQL 并不意味着 Access 会返回正确的结果。这是许多人对 Access 感到沮丧的众多事情之一。

补充要回答您的最后一个问题,不,不强制使用 Jet 作为使用 Access 开发的应用程序的后端存储技术。您可以创建使用 SQL Server 或其他数据库产品作为后端数据库存储的 Access 解决方案。

关于Jet Engine的 Wikipedia 文章实际上非常详尽地描述了差异和功能。

于 2010-05-02T03:09:09.440 回答
1

编辑:我刚刚重读了知识库文章,它说问题出在 Jet 4.0 Service Pack 3 及更早版本上——这是一个很久很久以前就被取代的 Jet 版本。任何地方都不应该有 Windows 2000 或更高版本的计算机打开了 Windows 更新或自 c.c 起已更新。2002 的任何版本的 Jet 与 Service Pack 3 一样旧。要检查计算机上的 Jet 版本,请查找 MSJET40.DLL。内部版本号以服务包号开头。在这台 PC 上,我的版本号为 4.0.9511.0,即 SP9。

如果您有版本号为 4.0.3XXX.X 或更早版本的 MSJET40.DLL,请按照获取服务包的说明进行操作,问题将得到解决。但我不相信有任何大量 Windows PC 仍然安装 Jet 4.0 SP3 或更早版本。只有未使用 Windows Update 更新的 PC 才有可能拥有它。

原始答案: Jet 4.0 于 1999 年与 Access 2000 一起发布。它包含在 Windows 2000 中,并且包含在此后的每个 Windows 版本中。因为它是一个操作系统组件(它用于与 Active Directory 数据存储交互,尽管 AD 使用另一个 Jet 引擎,而不是 Access 使用的那个)。Jet 4.0 是 Jet 的冻结版本,Windows 团队(拥有它的代码)不会进一步开发。

Access 2007 发布时,创建了一个新版本的 Jet 数据库引擎,专用于 Access 开发团队,称为 ACE。它实际上是 Jet 5.0(或 4.5,取决于您认为增强的主要程度),但它引入了一种新的文件格式 ACCDB。

您引用的文章说它仅适用于 Access 2002 和 Access 2003,但我认为由于这是 Jet 4.0 问题,它也适用于 Access 2000。同样,它适用于从 Access 外部使用 Jet 4.0 ,例如 OLEDB 或 ODBC。

请注意,通过 DAO,您不会遇到问题,因为 DAO 无法使用 SQL 92 兼容模式。由于 OLEDB 的 Jet 驱动程序始终使用 SQL 92 模式,因此 OLEDB 将始终出现此问题。

我不清楚如果使用 ACE 查询 MDB 是否可以避免问题。

于 2010-05-02T00:58:07.097 回答
0

JET 是 Access 使用的数据库引擎。或者换一种说法,Access 是基于 JET 数据库引擎构建的应用程序。(Access不必使用JET,也可以直接连接SQL server。)

每当您对 .mdb 文件执行查询时,无论采用何种技术,执行查询的都是 JET 引擎。

访问 .mdb 需要 JET 版本,但它是否必须是 4.0 取决于 .MDB 文件版本以及您需要避免的早期版本中是否存在普遍的错误。但总的来说,是的,您应该期望将最新的 JET 版本与 Access MDB 一起使用。

OUTER JOINs 适用于旧版本 - 提到的错误仅在还有 WHERE 子句时才普遍存在。

于 2010-05-01T20:03:53.857 回答