尝试使用Microsoft.Office.Interop.Access.Application命名空间中的OpenCurrentDatabase连接到Access数据库时出现VB.net错误

时间:2018-11-23 21:24:02

标签: vb.net ms-access office365

我正在尝试使旧系统在新环境中工作。遗留系统由连接到Access数据库的VB.net应用程序组成。我的新环境包括Visual Studio 2017和Access 365。

当我尝试运行应用程序时,出现一条错误消息,

  

System.AccessViolationException:'尝试读取或写入   受保护的内存。这通常表明其他内存正在   腐败。”

我从头开始创建了一个新的VB.net应用程序和Access数据库,并且能够重新创建该错误。 VB代码如下。

        OkHttpClient.Builder httpClient =  
    new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {  
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        HttpUrl originalHttpUrl = original.url();

        HttpUrl url = originalHttpUrl.newBuilder()
                .addQueryParameter("format", "json")
                .addQueryParameter("api_key", "val")
                .build();

        // Request customization: add request headers
        Request.Builder requestBuilder = original.newBuilder()
                .url(url);

        Request request = requestBuilder.build();
        return chain.proceed(request);
    }
});

该错误发生在调用OpenCurrentDatabase的方法的最后一行。

我已经在其他论坛上阅读到可以通过单击Visual Studio的“生成”菜单,打开“配置管理器”屏幕并更改平台设置来解决此错误。我已经做到了,但是没有运气。但是,有时我可以得到一条不同的错误消息(在同一行代码中),显示为

  

System.InvalidCastException:'无法转换类型为COM的对象   'Microsoft.Office.Interop.Access.ApplicationClass'到接口类型   'Microsoft.Office.Interop.Access._Application'。此操作失败   因为接口的COM组件上的QueryInterface调用   IID为'{68CCE6C0-6129-101B-AF4E-00AA003F0F07}'的广告因   出现以下错误:加载类型库/ DLL时出错。 (来自的例外   HRESULT:0x80029C4A(TYPE_E_CANTLOADLIBRARY))。'

但是,解决此错误比解决第一个错误要容易得多。

如果有人可以帮助我解决此错误,我将不胜感激。我不认为对OpenCurrentDatabase的一种方法调用会引起如此多的困难,但是确实如此!

1 个答案:

答案 0 :(得分:2)

看来我必须做两件事才能解决此问题。首先,我修复了Office的安装(通过导航到“控制面板”,“程序和功能”,从程序列表中选择“ Microsoft Office 365 ProPlus-zh-cn”,右键单击并选择“更改”,接受默认的“快速修复”单选按钮,然后单击“修复”按钮。其次,我运行了“ Microsoft Access数据库引擎2010(英语)安装程序”,可以从以下位置下载该文件:https://www.microsoft.com/en-ca/download/details.aspx?id=13255。我运行AccessDatabaseEngine_2010.exe可执行文件,接受所有默认选项,然后单击“安装”按钮。完成这两个步骤后,错误消息就会停止发生,并且我的代码能够使用Access数据库。