【问题标题】:.NET Access automation with Access 2007 Runtime.NET Access 自动化与 Access 2007 Runtime
【发布时间】:2011-01-31 16:04:48
【问题描述】:

我在部署使用 Microsoft Access 自动化的 .NET 应用程序时遇到问题。

我已经在目标机器上安装了 Access 2007 运行时和主互操作程序集 (PIA):

Access 2007 Runtime

Office 2007 PIAs

但是,当我尝试创建 ApplicationClass 时:

Application access = new ApplicationClass();

我得到以下异常:

未处理的异常:System.Runtime.InteropServices.COMException (0x80080005):检索具有 CLSID {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} 的组件的 COM 类工厂失败,原因是以下错误:80080005。

我用谷歌搜索了错误代码并尝试调整 dcomcnfg 中的安全设置,但无济于事。

有什么想法吗?

由于成本,我不想安装完整版的 Access,而且运行时至少应该能够创建应用程序的实例,确定吗?

【问题讨论】:

  • 您是否为受信任的位置等设置了注册表项?

标签: .net ms-access com automation


【解决方案1】:

您无法启动访问运行时的自动化实例。发生的情况是访问确实在创建实例时启动。但是,由于它是运行时,因此访问会关闭。换句话说,您必须打开一个数据库以使运行时保持打开状态。

由于无法提供自动打开的文件名,因此解决方法是使用 Shell() 函数。通过 shell() 启动 ms-access 的副本,这允许您提供 accDB 或 mdb 文件作为 shell 命令中的参数。然后,在您的 .net 代码中,使用 get 对象的等价物代替 create 对象。

因此,当我们尝试在运行时自动化 ms-access 时,访问开发人员也存在同样的限制。您无法在代码中创建实例。但是,如上所示,您必须使用 Shell() 由于上述限制,即在没有文件参数的情况下启动访问运行时会关闭。

【讨论】:

    【解决方案2】:

    如果没有提供要安装界面的软件,PIA 将无法工作。

    如果您不希望在用户的计算机上安装 Access,您可以

    • 将应用程序重写为 VBA 中的 Access 应用程序,并使用 Access Runtime 进行部署。
    • 使用 2007 Office System 驱动程序:数据连接组件来访问您的数据库,但是该引擎不会公开许多 Access 功能,例如报表、表单、查询中的函数等。

    如果您切换到 ODBC/OLEDB/ADO,建议您升级到 SQL Server Express、SQL Server Compact Edition 或其他免费数据库软件。

    【讨论】:

    • 您可以通过 .NET 使用 PIA 自动执行 Access Runtime,只是无法以编程方式启动运行时(请参阅 Albert 的回复)。
    • 这是我的第一个建议,将前端代码从 C#/VB 移动到 VBA,以便它可以通过访问运行时运行。如果 db 中没有代码(很可能,假设用户发布自动化代码 n C#),那么当 db 应用程序启动时,您将无法运行任何内容。
    猜你喜欢
    • 2014-03-29
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多