【发布时间】:2020-07-28 02:44:19
【问题描述】:
作为前言,请注意,此帖子不是重复关于Microsoft.Jet.OLEDB.4.0 的以下任何常见问题的问题:
- 这不是“
Microsoft.Jet.OLEDB.4.0没有 64 位版本”问题。- 我在两台机器上都运行 32 位 .NET 可执行文件。
- 两台机器都安装了 32 位版本的 Office 2019(通过 Office 365)。
- 这也不是“在 JET 中使用 Access/VBA 函数”问题。
-
Nz()之类的函数仅在 Access VBA 中执行的 SQL 中可用,这些函数在通过 JET 或 ACE 执行的 SQL 中不可用。 - 但是
CLng是一个 JET 内部函数,当通过 JET 使用时(即在 Access VBA 之外)应该可以工作。
-
问题陈述:
-
我有一个使用 JET 内部函数(例如
CLng())的 SQL 查询。以下是重现问题的最小查询:SELECT CLNG( 123 ) AS Foo -
当我在我的计算机上运行此查询时(通过 Office 365 安装了 32 位 Office 2019):
-
当我使用
Microsoft.Jet.OLEDB.4.0OLE-DB 提供程序时,它会失败并显示以下异常消息:OleDbException表达式中未定义函数“CLNG”。HResult: -2147217900NativeError: -530123806SQLState: 3085 -
当我使用
Microsoft.ACE.OLEDB.16.0OLE-DB 提供程序时,它会成功。
-
-
当我在另一台计算机上运行此查询时(也通过 Office 365 安装了 32 位 Office 2019):
- 当我使用
Microsoft.Jet.OLEDB.4.0OLE-DB 提供程序时,它会成功。 - 当我使用
Microsoft.ACE.OLEDB.16.0OLE-DB 提供程序时,它会成功。
- 当我使用
-
两台计算机使用相同的数据库文件,它是 JET 4.0 (Access 2000)
*.mdb数据库文件。
在枚举 32 位 OLE-DB 提供程序时,两台计算机报告的 JET 和 ACE 驱动程序信息相同(请参见下面的屏幕截图,我的计算机在顶部,另一台计算机在底部):
- 我没有使用
Microsoft.ACE.OLEDB.12.0进行测试,因为 ACE 15 (Office 2013) 和 ACE 16 (Office 2016, Office 2019) 都覆盖了 ACE 12 提供程序注册,因此任何请求 ACE 12 的应用程序都将获得 ACE 15 或 16。
假设:
我将假设有一些标志或系统范围的开关来配置Microsoft.Jet.OLEDB.4.0 如何处理内部函数(我知道 JET 4.0 驱动程序可以在 SQL-89 和 SQL-92 模式下运行,我想知道它是否与that) 不会影响Microsoft.ACE.OLEDB.16.0 驱动程序。
我会就此事件联系 Office 支持并报告他们的答案 - 如果有的话,但如果有人有任何想法,我将不胜感激。
【问题讨论】: