4

由于无法完全控制的情况,我必须开发 ACCESS 查询,这些查询将存储在 Access 2000 MDB 中,但可以在以下任何一种情况下开发:Access 2000、2002、2003、2007、2010。这些查询将访问(通过链接表)MS SQL Server DB 或 Access 2000 .MDB 文件。

过去,我们遇到过与不兼容 ANSI-92 的查询有关的问题。我们通过在工具|选项对话框的表/查询选项卡中标记复选框来解决这个问题(在 Access 2007 之前的旧版本下)。

我们在各种系统之间移动这些 Access 应用程序 .MDB,我们现在通常没有任何问题。

但是,我刚刚开发了一个适用于所有内部联接的查询,但是当我将其中一个联接更改为外部联接时,查询失败并在 Access 2010 下出现“无效操作”错误。所以我想我会检查是否仍然设置了 ANSI-92 复选框。我找不到它。

现在,我知道 Access 2003 及更高版本自动使用 ANSI 92 语法,但我想知道是否有任何方法可以检查这些查询在这种情况下(相当具体的情况)是否属于这种情况。我观察到,当我们更改复选框时,我所有的“Like”查询都变成了“Alike”查询......

所以问题归结为在这种情况下ANSI 92语法完全透明,而我的查询失败的原因是别的......

TIA,保罗

4

2 回答 2

3

在 Access 2010 中,SQL Server 语法兼容性的设置如下:

文件 > 选项 > 对象设计器 > 查询设计。

您首先需要检查是否设置了该选项,以确认您的查询行为是否正常。

至于LIKEvs ALIKE,后者将以 ANSI 方式工作,使用%_模式匹配。
在 SQL-89 兼容模式(MS Access SQL 子集)中,LIKE 仅适用于*and?模式,但如果您将兼容性更改为 SQL-92,则需要改用%and重写查询_

这就是ALIKE引入的原因,它允许您编写符合 ANSI 的模式,而不管您选择的兼容级别如何(因此在 SQL-92 兼容模式下,两者的行为相同)。

于 2011-06-17T07:48:51.840 回答
-1

确实没有理由在 Access 前端中将 ANSI 92 SQL 模式设置为 ON,除非您是一个懒惰的 SQL Server 程序员,他想忘记他是在 Access 而不是 SQL Server 中编写 SQL。

您不想这样做的原因是因为它改变了 Access 应用程序中的内容,而实际上并没有做任何事情来增强与 SQL Server 后端的交互。也就是说,如果您在 Access 前端的 SQL 中使用 SQL 89 通配符,则 ODBC 驱动程序会在将 SQL 发送到服务器时负责转换为 SQL 92 通配符。唯一的例外是直通查询,但无论如何这些都是用服务器的本机 SQL 编写的。

于 2011-06-17T18:46:45.900 回答