Microsoft Access 数据库引擎 2016 - 在 2010 中正常工作的某些 SQL 查询出现问题

Posted

技术标签:

【中文标题】Microsoft Access 数据库引擎 2016 - 在 2010 中正常工作的某些 SQL 查询出现问题【英文标题】:Microsoft Access Database Engine 2016 - issues with certain SQL queries that work fine with 2010 【发布时间】:2020-01-30 12:45:38 【问题描述】:

我有一个使用连接字符串在 32 位中运行良好的应用程序:

Driver=Microsoft Access Driver (*.mdb); Dbq=MyDatabase.mdb; 

在未安装 Office 的 PC 上使用 C++ 中的 ADO。

我已将其转换为 x64,并且我认为无论主机 PC 是否安装了 x64 Office,我都需要安装某种形式的 Access 驱动程序。所以我抓住 Microsoft Access Database Engine 2016 Redistributable 并安装它。

通常一切正常,但某些 SQL 查询失败。最引人注目的是使用LIKE '%somevalue%' - 现在我知道% 是ANSI-92,但正如我所说,它工作正常,所以假设它与ADO 相关(我猜我可以将其更改为ALIKE)。

我不明白的是,如果我安装了 Access 数据库引擎 2010,那么一切都会按预期工作。 Access Database Engine 2016 中似乎有些不同。我确实查找了一些发行说明/重大更改,但找不到任何东西。

所以我的问题是在 Microsoft Access 数据库引擎 2016 中解析 SQL 的方式是否发生了变化,我是否应该让客户安装 2010 版本?

注意:另一个似乎失败的查询是带有Yes/No 字段的表。我有一个查询检查:field <> 0,这会引发异常。

更新:如果我安装 Microsoft Access 2016 Runtime,那么一切似乎都可以正常工作。所以这个问题似乎特定于 Microsoft Access Database Engine 2016

总之:

No Office Installed: Installed Access 2016 x64 Database Engine: Query FAILS
No Office Installed: Installed Access 2010 x64 Database Engine: Query PASSES
32bit Office Installed: Installed Access 2016 x64 Database Engine: Query FAILS
32bit Office Installed: Installed Access 2010 x64 Database Engine: Query PASSES
x64 Office Installed: Installed Access 2016 x64 Database Engine: Query PASSES

查询在哪里:

SELECT * from sometable WHERE somefield LIKE '%ABC%';

设置是:

Window 10 Version 1909
32 bit Office: Microsoft Office MSO 16.0.12325.20280 32bit 
64 bit Office: Microsoft Office MSO 16.0.12325.20280 64bit

从这里访问数据库引擎 (x64):microsoft.com/en-us/download/details.aspx?id=54920

我的应用是 x64

【问题讨论】:

W10 版本 1909,Microsoft Office MSO 16.0.12325.20280 32 位。然后从这里安装 Access 数据库引擎 (x64):microsoft.com/en-us/download/details.aspx?id=54920 失败的查询基本上是 SELECT * from sometable WHERE somefield LIKE '%ABC%';如果我卸载 2016 数据库引擎并安装 2010 数据库引擎,则此查询工作正常 Office 是即点即用的吗?如果位匹配,Can't use the Access ODBC driver or OLEDB provider outside Office Click-to-Run applications 是一个问题(不适用于数据库引擎可再发行组件,因为那是 Msi 版本) 仍然缺少运行 sql 的代码,尤其是连接字符串。对于 ADO,使用 OleDB 提供程序。对于 C++.Net,您可以使用.NET Framework Data Provider for OLE DB 也许这有助于***.com/questions/6649363/…。如果访问仅用作数据库,请考虑替换为例如 SQLite,因为即使您解决了该提供商问题,您的客户也会遇到位数问题,因为您不应该在同一台机器上安装 x86/x64 办公组件(更新会导致奇怪行为),我猜你不想告诉客户,改变办公室位。使用 Access 作为前端,而不是作为后端。 【参考方案1】:

您是使用 SQL Server 作为后端数据库,还是使用 Access? 在 SQL Server 中,% 是通配符。

对于纯 Access 环境,通配符标准通常是 * 可能有一个设置可以改变这个,但我不记得了。

参考:https://support.office.com/en-us/article/like-operator-b2f7ef03-9085-4ffb-9829-eef18358e931

【讨论】:

再次阅读问题,那里的所有信息。更改选项是 ANSI 92(对象设计器)。

以上是关于Microsoft Access 数据库引擎 2016 - 在 2010 中正常工作的某些 SQL 查询出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Office 12.0 Access 数据库引擎 OLE DB Provider

宏 - 查询 - Microsoft Access 数据库引擎停止了进程

Microsoft Office 12.0 Access 数据库引擎 OLE DB 提供程序问题

Microsoft Access 数据库引擎找不到输入表或查询

将 Microsoft Office Access 数据库引擎 2007 包含到 InstallShield Limited Edition 的安装程序中

Microsoft Access 数据库引擎 2016 - 在 2010 中正常工作的某些 SQL 查询出现问题