我有一个SPI钩子,它拦截了网络访问后需要存取一下本地的Access数据库,
可是在使用ADO访问数据库时,虽然_Connection正确创建了,但是当Open的时候却一直
等待在这里。请问如何解决?

解决方案 »

  1.   

    do you use thread to connect database?
    try add Sleep(DelayTime()) before Open function.
      

  2.   

    是这样的
    _Connection *pConn;
    CoCreateInstance(pConn);
    pConn->Open();//会一直停在这里不动。
      

  3.   

    你使用了多线程吗,设置一下open的参数看看。
       Rs1->Open( Source, Connect, 
                ADODB::adOpenForwardOnly, 
                ADODB::adLockReadOnly, -1 );
      

  4.   

    参数当然都设过了,
    ::CoCreateInstance(__uuidof(Recordset),NULL,CLSCTX_INPROC_SERVER,__uuidof(_Recordset),LPVOID*)&pRs);

    pRs->CursorType = adOpenDynamic;
    pRs->Open(_variant_t((LPCTSTR)lp), _variant_t((IUnknown*) m_pConn, true), 
    adOpenKeyset, adLockReadOnly, adCmdText);
      

  5.   

    Access 数据源设置应该没问题吧?
      

  6.   

    pConn->Open();//会一直停在这里不动。
    Open 是否会使用 winsock ?如果使用那就会造成 SPI 重入。
    而且你在进程访问网络时,去访问 com 接口,可能会破还进程原先对com访问的一些状态。
    建议使用另一个进程访问数据库,然后通过进程间通信交互。