From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



连接Microsoft Access Database 时弹出错误"OleInitialize Failed Error"



主要软件: TestStand
主要软件版本: 1.0
主要软件修正版本: N/A
次要软件: N/A

问题:

当我使用version 3.50 Jet driver 连接Microsoft Access 97 数据库时,弹出以下错误信息:

Error Message:
Native error code -2147467259 0x80004005
Microsoft OLE DB Provider for ODBC drivers:
[Microsoft][ODBC Microsoft Access 97 Driver] General error
OleInitialize failed.
return code last error 0x80010106

 



解答:

使用MS Access driver version 3.51.171300 或之后的版本,或者使用如下所示的单线程选项:当使用Access 97 支持driver 3.50 或早期版本,你必须启用单线程访问数据库的选项,因为 Microsoft Jet driver 不支持自由线程的ActiveX 的comparment 模型,而数据库组件默认情况下会用到该模型。如需更多信息可参考 TestStand\DOC\TestStandDatabaseComponentsBeta.pdf  章节 "Use Single Thread to Access Database"的第12-17页。文中表明,使用这个控件引导Teststand 从单一工作线程去访问数据库。这个选项只有在不支持多线程访问的数据中才被启用,包括任何使用Microsoft Jet Driver 的ODBC 数据库,也包括 Microsoft Access。这个选项只有在下一节Teststand 后才会生效。

Teststand readme文档里也有关于这个问题的描述:ActiveX 定义了两个主要的你可以初始化一个线程的并发性模型:apartment-threaded 以及 multi-threaded (free-threaded)。在一个线程里使用ActiveX 之前,你必须初始化这个线程来使用其中一个模型。

Microsoft Access Jet driver 只支持 apartment-threaded 模型。换句话说,Jet 要求连接和断开过程必须在同一个线程里进行操作。这个适用于所有使用Jet 的 Microsoft Desktop driver。

Teststand初始化每个可执行线程来使用多线程并发性模型。任何subsequence 调用一个step初始化OLE为apartment-threaded 的过程都会失败。

已知的关于保证对Microsoft Access 数据库的调用发生在apartment-initialized 的线程中的唯一解决方案是:创建一个工作线程来通过所有的数据库调用。在你创建这个线程之后,你必须初始化线程来使用 apartment-threaded 模型。



相关链接:

附件:





报告日期: 03/30/1999
最近更新: 07/25/2016
文档编号: 1JT9E9TL