请问高手有没有遇到过这样的问题,我的程序是在vc.net 2005下编译运行的,通过ado来访问远程oracle服务器数据库,当安装了oracle 9i 客户端的管理员方式时,连接成功,但是当客户端安装“运行时”方式时,就不能连接了,运行错误是“unspecified error",我查了相关的帖子,有说是因为“运行时”方式是没有oledb组件的,需要安装oracle 9i 补丁程序ODAC92070.exe,但是我这个程序是很多人都要用的,我不能要求客户都安装这个补丁,所以能否找到什么替代方法呢?比如说把相关dll 或者lib文件一起链接编译进我的程序?能否详细说明步骤呢?我是新手,多谢了! str_con=_T("Provider=OraOLEDB.Oracle.1;User ID=system;Password=sys;Data Source=(DESCRIPTION=(ADDRESS= (PROTOCOL=TCP)    (HOST=192.168.10.188)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=locl)));Persist Security Info=False")
        _ConnectionPtr m_pConnection;
AfxOleInit(); 
try 

HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr)) 

if (FAILED(m_pConnection->Open(str_con.GetString(),L"",L"",adOpenUnspecified))) 
{
SendMessage(theApp.m_pMainWnd->m_hWnd, ID_TH_NETWORKERR, TRUE, FALSE);
}
else
{
SendMessage(theApp.m_pMainWnd->m_hWnd, ID_TH_NETWORKERR, TRUE, TRUE);
}


catch(_com_error e)

CString errormessage; 
errormessage.Format(_T("Error:%s"),e.ErrorMessage()); 
AfxMessageBox(errormessage);
SendMessage(theApp.m_pMainWnd->m_hWnd, ID_TH_NETWORKERR, TRUE, FALSE); }

解决方案 »

  1.   

    OraOLEDB.Oracle.1
    你这里用的是oracle提供的驱动。。换成微软的就应该不用安装
      

  2.   

    这个没有太好的办法,Oracle比较特殊,客户机得装Oracle客户端后才能访问。建议你使用OCI来调用
      

  3.   

     请问xsc,客户机安装的是oracle客户端的“运行时”选项,如果客户机安装的是“管理员”选项就没问题了,该如何解决?
      

  4.   

    str_con=_T("Provider=OraOLEDB.Oracle.1;User ID=system;Password=sys;Data Source=(DESCRIPTION=(ADDRESS= (PROTOCOL=TCP)    (HOST=192.168.10.188)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=locl)));Persist Security Info=False") 
    改成:
    str_con=_T("Provider=MSDAORA.1;User ID=system;Password=sys;Data Source=(DESCRIPTION=(ADDRESS= (PROTOCOL=TCP)    (HOST=192.168.10.188)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=locl)));Persist Security Info=False") 
    试试..
      

  5.   


    这我以前就用过了,这次又试了一下,连“管理员”版本都报错:"Error:Unspecified error"
      

  6.   

    你把catch中的e.ErrorMessage改成e.Description再运行看看能否显示更详细的异常信息??
      

  7.   

    多谢各位,最后我用oci解决了,楼上回帖的都加分了