当前位置: 代码迷 >> VC/MFC >> VC++ 6.0连接数据库,Open时0x800A0E7A 异常,在小弟我笔记本上Win10 32位可以连接服务器,但是客户机器上不可以,重装系统也不行,呀
  详细解决方案

VC++ 6.0连接数据库,Open时0x800A0E7A 异常,在小弟我笔记本上Win10 32位可以连接服务器,但是客户机器上不可以,重装系统也不行,呀

热度:126   发布时间:2016-05-02 03:32:03.0
VC++ 6.0连接数据库,Open时0x800A0E7A 错误,在我笔记本上Win10 32位可以连接服务器,但是客户机器上不可以,重装系统也不行,求助呀
try
{
m_pConn-> CursorLocation=adUseClient; //游标类型

m_pConn->Open("Provider=SQLNCLI11;Initial Catalog=MSDataBase;Data Source=.\\SQLEXPRESS;","sa","rsd102",adModeUnknown);
m_pRs->Open("select * from tb_detect",_variant_t(m_pConn,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error &e)
{
::AfxMessageBox(e.ErrorMessage());
}


Open的时候,在客户机器上异常退出,XP  32位,Win7 32位都试过,在外地出差呢,大家帮帮忙呀,网上搜索的问题都试了不行,服务器是SQL Server 2012

------解决思路----------------------
catch捕获下错误内容是什么先
------解决思路----------------------
0x800A0E7A 是表示ADO找不到指定的提供者,是不是权限不够?
------解决思路----------------------
引用:
Quote: 引用:

0x800A0E7A 是表示ADO找不到指定的提供者,是不是权限不够?
会是什么权限呢?

数据库访问权限
------解决思路----------------------
win7开始,微软对应用程序的权限控制就很严格了,你的这个错误在网上是可以搜索到错误原因的,具体的原因还是你自己先去查查,然后对应自己的代码去调试
------解决思路----------------------
这样加异常捕获看是什么错误
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"), 
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}

WIN10的ADO版本比XP版本高,在高版本编译在低版本是运行不了,反过来就可以了。

------解决思路----------------------
在64位Windows下:
64位exe和dll在目录c:\windows\system32目录下;
32位exe和dll在目录c:\windows\syswow64目录下;
所以要注意:
    在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
  相关解决方案