VS2013 编译生成的MFC exe文件在其他未安装VS的电脑上运行报连接不上数据库

时间:2022-12-17 21:50:27
用VS2013写的MFC程序,MFC用ado连接了access数据库,生成exe后,将exe与.mdb的数据库文件一起拷到其他电脑运行,该电脑也是64位,安装了access,但是运行后弹出连接数据库失败,最后点击关闭后出现debug error VS2013 编译生成的MFC exe文件在其他未安装VS的电脑上运行报连接不上数据库
::CoInitialize(NULL);
m_pConnection.CreateInstance(_uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\HistoryFault.mdb", "", "", adModeUnknown);
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s", e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return FALSE;
}

3 个解决方案

#1


m_pConnection.CreateInstance 要判断返回值是否是  S_OK

可以在其它机器上安装VS的 远程调试器  进行远程调试

#2


在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
    在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
    且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
    在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
    在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe

#3


问题解决了,要用相对路径连接access,
     CString sPath,m_strPath; 
GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH); 
sPath.ReleaseBuffer(); 
int len = sPath.ReverseFind('\\') + 1; 
m_strPath = sPath.Left(len);
CString strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strPath + "data\\" + "HistoryFault.mdb";
try
{
m_pConnection->Open(_bstr_t(strConnection),"", "", adModeUnknown);
}
但是生成的exe在32位系统上运行界面变大了,下面部分被桌面挡住了,搜了一下要配置VS的平台,但是我的没有x86选项,只有x64和arm,这个怎么解决

#1


m_pConnection.CreateInstance 要判断返回值是否是  S_OK

可以在其它机器上安装VS的 远程调试器  进行远程调试

#2


在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;
所以要注意:
    在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。
    且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
    在win64位系统下设置32位程序使用的数据库别名要用c:\windows\syswow64\cliconfg.exe
    在win64位系统下设置32位程序使用的系统DSN要用c:\windows\syswow64\odbcad32.exe

#3


问题解决了,要用相对路径连接access,
     CString sPath,m_strPath; 
GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH); 
sPath.ReleaseBuffer(); 
int len = sPath.ReverseFind('\\') + 1; 
m_strPath = sPath.Left(len);
CString strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strPath + "data\\" + "HistoryFault.mdb";
try
{
m_pConnection->Open(_bstr_t(strConnection),"", "", adModeUnknown);
}
但是生成的exe在32位系统上运行界面变大了,下面部分被桌面挡住了,搜了一下要配置VS的平台,但是我的没有x86选项,只有x64和arm,这个怎么解决