首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Microsoft.Jet.OLEDB.4.0抱怨我的计算机上未定义的函数,而不抱怨其他函数?

为什么Microsoft.Jet.OLEDB.4.0抱怨我的计算机上未定义的函数,而不抱怨其他函数?
EN

Stack Overflow用户
提问于 2020-07-28 02:44:19
回答 2查看 543关注 0票数 1

作为序言,请注意,这篇文章并不是关于Microsoft.Jet.OLEDB.4.0的以下任何常见问题的重复问题

  • 这不是“没有64位版本的Microsoft.Jet.OLEDB.4.0"-problem。
    • I正在这两台机器上运行32位.NET可执行文件。
    • 两台机器都有Office2019的32位版本(通过Office 365)

  • 这也不是“使用JET内部的Access/VBA函数”的问题。
    • 函数(如Nz() )仅在Access VBA内执行的SQL中可用,在通过JET或Nz()执行的SQL中不可用。然而,
    • CLng --当通过JET (即Access
    • 之外)使用时,它是一个应该工作的JET内部函数。

问题陈述:

  • I有一个使用JET内在函数(如CLng() )的SQL查询。下面是一个复制问题的最小查询:

选择CLNG( 123 )作为Foo

当我在计算机上运行此查询时(通过Office 365安装了32位Office 2019 ):

表达式中的

代码语言:javascript
复制
- When I use the `Microsoft.Jet.OLEDB.4.0` OLE-DB provider it fails with this exception message:

OleDbException未定义函数'CLNG‘。

HResult: -2147217900

NativeError: -530123806

SQLState: 3085

代码语言:javascript
复制
- When I use the `Microsoft.ACE.OLEDB.16.0` OLE-DB provider it succeeds.

当我在另一台计算机上运行此查询时(通过Office 365安装了32位Office 2019 ):

代码语言:javascript
复制
- When I use the `Microsoft.Jet.OLEDB.4.0` OLE-DB provider it succeeds.
- When I use the `Microsoft.ACE.OLEDB.16.0` OLE-DB provider it succeeds.

  • 在两台计算机中使用相同的数据库文件,它是JET 4.0 (Access 2000) *.mdb数据库文件.

当枚举32位OLE-DB提供程序时,两台计算机为JET和ACE驱动程序报告相同的信息(请参见下面的屏幕快照,我的计算机位于顶部,另一台计算机位于底部):

  • I不使用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驱动程序可以在SQL89和SQL-92模式下运行,我不知道它是否与此相关),这并不影响Microsoft.ACE.OLEDB.16.0驱动程序。

我会就这件事联系Office支持部门,并汇报他们的回答--如果有的话,但是如果有人知道的话,我会非常感激的。

EN

回答 2

Stack Overflow用户

发布于 2020-07-28 08:24:18

有意思的。您检查过JET/ACE的沙箱设置吗?

沙箱设置将防止JET/ACE sql中使用“某些”函数,并防止(不允许)使用它们。

这里的信息:https://support.microsoft.com/en-ie/office/turn-sandbox-mode-on-or-off-to-disable-macros-8cc7bad8-38c2-4a7a-a604-43e9a7bbc4fb

https://support.microsoft.com/en-ie/office/functions-and-properties-in-access-blocked-by-sandbox-mode-9a829783-f7a8-4a9f-8d43-8650b8cc9565?ui=en-us&rs=en-ie&ad=ie

但是,clng()不是阻塞的sql函数之一。所以我怀疑这会是个问题。但是,我会对这些问题做一个快速的测试/检查。(再一次,我很抱歉根据你给出的信息提出了一个长远的建议,这不应该是你的问题。)

现在,最好的猜测?您希望将JET sp更新安装到失败的开发框中。我想试试这里的sp8:https://www.microsoft.com/en-us/download/details.aspx?id=7151

你的笔迹看上去很完整。而且,由于查询是工作的,而不是那些具有某些功能的查询。我以前见过这个问题--我记不起解决办法了。我记得这是在2003年左右!我们发现sql中的“一些”函数可以工作,而有些则不行。我似乎记得,修复方法是重新注册一个额外的.dll,它为jet提供了一些附加的jet函数。换句话说,有一个包含/添加/允许JET sql函数的.dll。如果这个部件坏了,那么一些喷射功能就不能工作了。

问:其他JET本机功能会失败吗?还是全部?如果都失败了,我会查看沙箱设置。如果有的话,那么sp8安装是最好的猜测。

并给出这是100% jet,然后问题,如中断引用有关VBA不适用于这里。我记得这不是VBA函数失败的原因,也不是VBA引用中断造成的。(一旦它们向南,那么当使用Access应用程序(包括JET sql)时,几乎所有的sql()函数都会中断。)(再说一遍:你用的是JET,而不是真正的access)。

我猜另一个很长的机会?如果这是一个不同的mdb,还是你在测试中被殴打致死的副本?我会考虑启动它的访问,并做一个紧凑+修理。

所有或仅仅是“一些”jet sql函数将说明这一点。但是,一旦你找到了这个答案,我就没有办法了!但是,如果所有函数()无论如何都失败了呢?好吧,那喷气机,而不是ACE,是在那台机器上的。你需要重新安装喷气式飞机。从2007年起我就没这么做过了。(喷气式飞机是窗户的一部分)。

我认为你找不到JET下载。但是你可以用谷歌搜索JET -这是我最好的选择和建议--尝试安装一个JET sp8包。

票数 2
EN

Stack Overflow用户

发布于 2020-11-26 19:24:41

原来,在我的机器上,当32位ACE驱动程序已经安装时,我已经强制安装了64位ACE驱动程序。在卸载64位ACE驱动程序(并重新安装32位ACE驱动程序以获得良好效果)之后,它又开始正常工作了。

怀疑32位和64位的驱动程序总是将JET的内置(在ODBC兼容的子集中)委托给Visual运行时DLL,它需要32位或64位与ACE驱动程序兼容,但是它试图以一种在32位/64位ISA不正确时失败的方式加载JET(如果正确的话,我可能应该使用像ProcMon这样的工具来查看实际情况.)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63126284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档