• x64 win64编译环境下ADO链接Access数据库的问题解决


    原文链接地址:https://blog.csdn.net/HW140701/article/details/71077579

    Win32编译环境下,用ADO数据库连接Access数据库一般都不会报错,但是最近由于项目上的需要,程序需要编译成64位以便申请到更多的使用内存空间,当把编译方式从Win32改为x64的时候,突然出现了数据库连接出现未知错误,这时候就猜到了应该是编译环境的改变导致了数据库连接出错,在参考了其他大神的解决方案之后,终于解决了这个问题,我的环境为Win7 64+MFC(VS2010)+ADO+Access2007。

        参考链接如下:

        http://blog.csdn.net/sundacheng1989/article/details/17925431

        http://www.cnblogs.com/bluedoctor/p/3925871.html

        http://blog.csdn.net/kirawoo/article/details/39032387

        http://blog.csdn.net/u010891996/article/details/12522911

    解决方法:

    步骤1:去官网下载AccessDatabaseEngine_64.exe,下载链接

    https://www.microsoft.com/zh-cn/download/details.aspx?id=13255

    或者直接去我的下载频道进行下载

    http://download.csdn.net/detail/hw140701/9830665

    骤2:这一个步骤是强制安装刚刚下载的AccessDatabaseEngine_64.exe,如果不强制安装的话,它会要求你卸载你所安装的全部的Office软件,那多麻烦!!!,所以选择忽略提醒,强制安装,

    打开cmd.exe,在命令行输入“你的AccessDatabaseEngine_64.exe的存放路径” /passive,比如我的就是"F:软件我下载的Windows数据库编程AccessDatabaseEngine_64.exe" /passive强制安装,输完这个命令就等待安装完成。

    步骤3:在安装完上述引擎之后,你需要修改一下你的代码,在win32编译环境下我们的数据库的链接字符串是

    m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);

    如果你需要在x64的编译环境环境下连接Access数据库你需要修改为

    m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);

    为了更好的适配不同的编译环境,我将我的代码修改为

     1 //初始化COM,创建ADO连接对象实例 
     2     getsample_pConnection.CreateInstance(__uuidof(Connection));
     3     getsample_pRecordset.CreateInstance(__uuidof(Recordset));
     4     //构造数据库连接字符
     5     CString m_connection;
     6     #if defined _WIN64//如果是64位程序
     7     m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);
     8     #elif defined _WIN32//如果是32位程序
     9     m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);
    10     #endif
    11     
    12     try
    13     {    
    14         //使用Open方法连接数据库
    15         getsample_pConnection->Open(_bstr_t(m_connection),"","",adModeUnknown);
    16         //以下两行用来设置状态栏的提示信息 
    17     }
    18     catch(_com_error e)//捕捉数据库打开过程中的错误信息
    19     {
    20         
    21         CString tempErrorMessage;
    22         tempErrorMessage.Format("数据库连接失败,错误原因为:%s",e.ErrorMessage());
    23         AfxMessageBox(tempErrorMessage)
    24     }

    当是64位程序的时候就为
    m_connection.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s",databaseName);

    当是32位程序的时候就为

    m_connection.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",databaseName);

    然后重启一下PC,应该就可以编译成功了。

  • 相关阅读:
    五子棋
    纯ASP实现的“无刷新”聊天室
    砸砖块
    ASP.NET中批量插入数据
    判断一个dataset的数据是否包含另一个dataset的数据
    使用DB2时的一些问题
    RTOS,什么是硬实时和软实时
    异或运算^的一个作用
    vc 重启和关机
    About DLL
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/10620333.html
Copyright © 2020-2023  润新知