访问部分代码如下:
    _bstr_t strConnect="Provider=MS Remote;Remote Server=server;Remote Provider=SQLOLEDB;\
        Network Library=DBMSSOCN;Data Source=server;Initial Catalog=office;User ID=hwalee;Password=;";    HRESULT hr;
    try                 
    {    
        // 打开远端office库
        hr = m_pConnection.CreateInstance("ADODB.Connection");
        if(SUCCEEDED(hr)){
            hr = m_pConnection->Open(strConnect,"","",adConnectUnspecified);
        }
    }
    catch(_com_error e)
    {
        AfxMessageBox("数据库连接失败!");
        return FALSE;
    }  
    try
    {
        if(SUCCEEDED(hr)){
            hr = m_pRecordset.CreateInstance("ADODB.Recordset");
            if(SUCCEEDED(hr)){
                m_pRecordset->Open("SELECT * FROM xfmxb",// 查询DemoTable表中所有字段
                _variant_t((IDispatch *)m_pConnection,true), // 获取库接库的IDispatch指针
                adOpenDynamic,
                adLockOptimistic,
                adCmdText);
            }
        }
    }
    catch(_com_error e)
    {
        AfxMessageBox("查询数据失败!");
        return false;
    }
查询一分多钟就报错。用的远程数据库,连接是成功的。

解决方案 »

  1.   

    m_pRecordset->Open("SELECT * FROM xfmxb",// 查询DemoTable表中所有字段在上面这条语句前面加上下面这条语句:
    m_pRecordset->PutRefActiveConnection(m_pConnection);
      

  2.   

    1.stdafx.h中加入
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 
    2。app文件的InitInstance中加入
    if(S_OK!=OleInitialize(NULL))
    {
    AfxMessageBox("初始化COM组件库错误");
    }
    下面就是数据库操作
    _ConnectionPtr pConn;
    _RecordsetPtr  pRs;
    CString strSQL;
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation=adUseClient;
    strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
    pConn->Open(_bstr_t(strSQL),"","",-1);

    pRs.CreateInstance(__uuidof(Recordset));
    pRs->CursorLocation=adUseClient;
    pRs->PutActiveConnection(pConn.GetInterfacePtr());

    pRs1.CreateInstance(__uuidof(Recordset));
    pRs1->CursorLocation=adUseClient;
    pRs1->PutActiveConnection(pConn.GetInterfacePtr()); strSQL="select * from catalog order by cataid";
    pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);