KB4484218 更新后 FireDAC MSAcc ODBC 驱动程序损坏

Posted

技术标签:

【中文标题】KB4484218 更新后 FireDAC MSAcc ODBC 驱动程序损坏【英文标题】:FireDAC MSAcc ODBC Driver broken after KB4484218 update 【发布时间】:2020-01-28 09:51:26 【问题描述】:

我的解决方案使用 ms-access 数据库和 FireDAC 的“MSAcc”驱动程序来访问数据库 (*.mdb)。

我的一些客户在为 Office 安装 1 月 Windows 更新后遇到了问题 (KB4484218 - 请注意,根据计算机上安装的 Office 版本,相同的补丁可能会应用于另一个 KB。仅供参考我会在下面列出它们)。

以前在同一台计算机上运行的应用程序现在不再启动,并且在建立数据库连接时失败。 我已经回滚了这个特定的 KB,并且应用程序再次运行。 我知道至少有一家其他软件供应商受到此问题的影响。

我的问题如下:

还有其他人受此影响吗? 有人知道这是与 FireDAC 相关还是更广泛的问题? 有人能从 Embarcadero 或 Microsoft 找到这方面的信息吗?

据我所知可能引发此问题的更新:

Office 2010:Office 2010 安全更新说明 (KB4484127)

Office 2013:Office 2013 安全更新说明 (KB4484119)

Office 2016:Office 2016 安全更新说明 (KB4484113)

Office 2016 (KB4484218) 32 位版

Office 2016 (KB4464586) 32 位版

Office 2016 (KB4484168) 32 位版

更新: 根据要求,这里有更多关于此问题的上下文和信息。

  FDConnection1.Params.DriverID := 'MSAcc';
  FDConnection1.Params.Database := Edit1.Text; //path to .mdb file
  FDConnection1.Open;
  FDQuery1.Connection := FDConnection1;
  FDQuery1.SQL.Add( 'SELECT * FROM ' + edit3.Text); //insert column name
  FDQuery1.open;
  FDQuery1.first;
  ShowMessage(FDQuery1.FieldByName(edit2.Text).AsInteger.ToString);
  FDConnection1.Close

在未安装 KB4484218 的系统上执行上述代码,一切正常,应用程序显示该值。 但是,在应用 KB4484218 后在同一台机器上执行相同的代码时,我在 'ACECORE.DLL' 上遇到访问冲突

这与 Microsoft 的 KB4484218 发行说明一致,表明此特定 DLL 已被修改。

我敢打赌,MS 确实修改了 MS Access 驱动程序的这个组件。因此至少破坏了 FireDAC 的实现。

【问题讨论】:

你需要让你的q更清晰。当我认为您的意思是“开始”时,您会使用“靴子”一词。但是,即使您进行了更改,它似乎也不正确,因为如果您的应用程序无法启动,它就不会尝试打开与数据库的连接,所以您怎么知道那会失败。 您能否更准确地描述 Firedac 的 MSAcc 驱动程序的问题?直到今天我还看不到任何问题,但我们在这里使用的 Office 2019 可能不会受到影响。 “建立数据库连接时失败”可以从显示任何错误消息或描述它如何失败中受益。 @SchneiderInfosystemsLtd 请看我上面的消息,我添加了“更新”部分。 @Brian 刚刚更新了我上面的帖子。 【参考方案1】:

今天我遇到了完全相同的问题,我解决了它,如下所示:

    FDPhysMSAccessDriverLink 组件放在表单上。 将ODBCDriver 属性设置为Microsoft Access Driver (* .mdb)

这解决了问题,因为那时 ODBC 使用的是 Microsoft 没有搞砸的旧 DLL。

【讨论】:

这工作并解决了问题。当使用 FireDAC 和 KB4484218 时。 对。如果您仍处于开发阶段,这将有效。如果像我一样,您的应用程序已经部署到数百个客户的站点,这不再是一种选择。

以上是关于KB4484218 更新后 FireDAC MSAcc ODBC 驱动程序损坏的主要内容,如果未能解决你的问题,请参考以下文章

使用 FireDac 仅更新重复行中的 1 个(无主键或唯一字段)

关于DBX Framewrok 和 FireDac 的一点随笔

使用 __builtin_msa_ld_* 后如何转换为无符号向量类型

firedac二进制序列和JSON序列的对比

KB4338830 更新后冻结 Winsock 应用程序

删除记录时出现 NO_SQL_DATA 错误,firedac,delphi 10.3.1