ODBC Excel驱动程序:来自外部数据库驱动程序的意外错误

5
自10月10日的Windows更新后,ODBC Excel驱动程序已经停止工作。我们在尝试读取文件时会收到以下错误:
“外部数据库驱动程序(1)出现意外错误”
我们使用以下连接字符串在Delphi中使用ADO连接打开Excel文件:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

我可以通过切换到Microsoft.ACE.OLEDB.12.0来解决它,但为了使其工作,我们的所有客户都必须在使用我们的软件的计算机上安装Microsoft Access Database Engine Redistributable。

是否有其他解决方案或解决方法?提前谢谢。


请等待或催促微软(这是一个新问题)。这与Delphi无关。我猜你是在这个帖子中发帖的,对吗? - Victoria
是的,那是我。我想这与Delphi无关,但也许有人有一个特定于Delphi的解决方案(例如替代组件或FireDAC)。 - Bram
最好使用备用的ODBC驱动程序。目前还不清楚问题是驱动程序还是Access应用程序引起的。只有微软才知道确切情况。 - Victoria
相关问题在此处讨论:链接 - xMRi
1
可能与安全补丁有关 https://blogs.msdn.microsoft.com/dataaccesstechnologies/2017/10/18/unexpected-error-from-external-database-driver-1-microsoft-jet-database-engine-after-applying-october-security-updates/ - KyleMit
9个回答

3
在客户的机器上,我已经卸载了最后一次微软补丁中所带的KB4041681 (Windows 7)。 在我的计算机上,我已经卸载了KB4041676 (Windows 10)。 卸载后,Microsoft.Jet.OLEDB.4.0现在可以正常使用了。 希望微软能够尽快修复这个bug。

谢谢。我们目前也建议我们的客户卸载该补丁。 - Bram
如果您的系统是Windows 8.1,则需要卸载KB4041693。 - Sashus
@donhauro,我已经卸载了KB4041681(Windows 7),但仍然遇到“来自外部数据库驱动程序的意外错误”。你能否建议我其他替代方法。 - Pyd
你能确保在Windows中禁用了自动更新功能吗?顺便说一句:微软似乎正在处理这个问题。https://support.microsoft.com/de-de/help/4041681/windows-7-update-kb4041681 - donhauro

1

这里有一个解决方案。将"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1" 替换为Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls; Extended Properties=\"Excel 12.0;HDR = YES; 更改后,您需要在客户机上安装2007 Office系统驱动程序:链接 数据连接组件。


1
我开发的两个应用程序(C#和Java)自三年前以来一直存在同样的问题。 自2017年10月10日起,无法将数据导出到Excel 2003,但可以导出到Excel 2007,并且无法从Excel 2003导入数据,但可以从Excel 2007导入数据。
在ESRI的ArcGIS Desktop 10.5.1中(最受欢迎的地理处理软件之一),无法打开Excel 2003和.mdb文件。
暂时解决方案:在Windows 8.1中卸载KB4041693、KB4041687(可能适用于W10)。
在Microsoft的更新记录中,这两个路径都提到了“更新[...]和Microsoft Jet的安全更新”。 卸载并重新启动后,所有软件恢复正常。
这个问题是在2017年10月10日引入的。 在Microsoft论坛中,已报告了此问题(kb4041693应该“修复”它,但仍然不起作用)。 也许几周内他们会(正确地)修复这个问题。

0

0

我也遇到过同样的问题。将 Excel 2007 改为 Excel 目标即可解决。这与更改 provider=Microsoft.ACE.OLEDB.12.0 的方法相同。


0

这里是解决方案...我在另一个论坛上找到了它,对我来说完美地工作了... 它将百分之百地起作用

如下所述:

https://forums.embarcadero.com/thread.jspa?messageID=902557&tstart=0

https://forum.kanors-emr.org/showthread.php?tid=571&pid=2652#pid2652

KB4041681 安装了 msexcl40.dll 的 4.0.9801.1 版本。

  1. 查找 msexcl40.dll 的旧版本(4.0.9801.0)

  2. 将其放置在另一个目录中。他们建议放在应用程序目录中,但由于在下一步中您将修改注册表以指向此旧版本,因此它可以放在任何地方。

  3. 更新注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel\win32,使其指向第二步中的位置。


0

对我来说,按照以下步骤操作可以解决问题:

附:我们使用的是Windows Server 2008R2

1- 下载并安装此软件:https://www.microsoft.com/en-us/download/details.aspx?id=23734 2- 打开.dtsx文件并更改Excel连接。在属性对话框中,单击ConnectionString属性中的三个点,并将其更改为Microsoft Excel 2007。这将自动更改您的连接字符串为: Provider=Microsoft.ACE.OLEDB.12.0;Data Source={YOURPATH};Extended Properties=”Excel 12.0 XML;HDR=YES”; 3- 我们的一些.dtsx文件指向配置文件(通常具有.dtsConfig扩展名)。我还将这些文件更改为指向正确的提供程序(基本上复制并粘贴了我从Visual Studio获得的连接字符串)

完成以上步骤后,再次运行SQL作业即可正常工作。


0
如果您正在使用SSIS套件,那么请将Excel表格版本从2003更改为2007,在Excel源或Excel目标中。通常此问题是由于Excel版本引起的。

-2

这个问题是由最近的 Microsoft Office 更新引起的,目前还没有替代解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接