我需要同时操作两个数据库中的两个表(从一个数据库的表中读出所有记录insert到另一个数据库的表中),我建立了两个连接指针:
_ConnectionPtr m_pConnection;
_ConnectionPtr m_pConnectionSingleFile;
然后在OnInitDialog()中为这两个都生成了实例:
m_pConnection.CreateInstance("ADODB.Connection");
m_pRecordsetSingleFile.CreateInstance("ADODB.Recordset");
这样编译没有问题,但是运行到第二个 m_pRecordsetSingleFile.CreateInstance("ADODB.Recordset"); 时就报错内存不能读退出,我猜是不能同时创建同样的COM的问题吧,
请高手指点,谢谢。另外不用CreateInstance("ADODB.Connection");用了CreateInstance(__uuidof(Connection));这种方式或
CreateInstance(_uuidof(Connection));都不行,这里也顺便问一下,为何存在__uuidof(Connection)和_uuidof(Connection)两种方式呢

解决方案 »

  1.   

    一个实例_ConnectionPtr。
    先open要读出数据的实例,读完后,close
    再open要插入数据的实例,操作后,close。好像只能这样。
      

  2.   

    m_pRecordsetSingleFile 有定义吗?
      

  3.   

    需要一条一条读同时一条一条插入,所以想知道有没有不用close的方法。
    另外,m_pRecordsetSingleFile 有定义
      

  4.   

    如何使用ADO成批加入?
    现在的问题时无法同时使用两个数据源,至于成批加入应该是后话了.
    如果你了解,请给个用于ADO的SQL成批插入的语句,不要给我一个类似下面的
    insert into table1 select * from table2这样的
      

  5.   

    谢谢lfchen(一条晚起的虫) 网友,你说的是我最后实在没有办法之后的第二个选项,我还有一个选项是同时使用ADO和ODBC
    现在需要高手出来讲一下如何同时使用两个ADO连接实例
      

  6.   

    是否做了com初始化 CoInitialize()
    你可以尝试先做一个_ConnectionPtr 的实例并做一些查询,如果这个没有问题。再建立一个应该也没问题。这种连接多个数据源的我以前做过,没什么冲突。
    或者你把代码列一下,大家看看。
      

  7.   

    CoInitialize(NULL);和AfxOleInit();两种初始化的方法都分别试过了,不行
    用一个_ConnectionPtr 的实例做一些查询没有任何问题,一个连接里面建立多个数据集也没问题BOOL CHxDeployDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    //下面为数据库处理
    //::CoInitialize(NULL);
    AfxOleInit();//使用AfxOleInit()来初始化COM库,准备使用ADO操作数据库 
    m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    m_pRecordset.CreateInstance("ADODB.Recordset");
    // LPCSTR lpMultiByteStr="{SecondADO}";
    // LPWSTR lpWideCharStr;
    //  MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,lpMultiByteStr,22,lpWideCharStr, 11); CComPtr<ADOConnection>m_pConnectionSingleFile;
    CoCreateInstance(CLSID_CADOConnection,NULL,CLSCTX_INPROC_SERVER,IID_IADOConnection,(LPVOID*)&m_pConnectionSingleFile);

    //m_pConnectionSingleFile.CreateInstance(__uuidof(Connection)); //每个单独的版本发布单文件对应的 Connection对象
    //m_pConnectionSingleFile.CreateInstance("ADODB.Connection"); //每个单独的版本发布单文件对应的 Connection对象
    m_pRecordsetSingleFile.CreateInstance("ADODB.Recordset");
    return TRUE;  // return TRUE  unless you set the focus to a control
    }里面那些注释掉的基本都是我摸索不同方法的产物,现在用CComPtr<ADOConnection>m_pConnectionSingleFile仍然不行
      

  8.   

    头文件stdafx.h
     #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF","adoEOF") BOOL CHxDeployDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); HRESULT hr=CoInitialize(NULL);
    if (!SUCCEEDED(hr)) {
    return FALSE;
    }  
    _ConnectionPtr pConn1,pConn2;
    _RecordsetPtr pRst1,pRst2;
    CString strConn1,strConn2; try{
    HRESULT hr = pConn1.CreateInstance("ADODB.Connection");
    if(SUCCEEDED(hr)){
    hr=pConn1->Open((_bstr_t)strConn1,"","",adConnectUnspecified);
    }
    if(SUCCEEDED(hr)){
    hr=pRst1.CreateInstance("ADODB.Recordset");
    }
    if(!SUCCEEDED(hr)){
    return FALSE;
    }
    }
    catch(_com_error *e){
    TRACE("Error Conn1:%s",e->ErrorMessage());
    delete e;
    } try{
    HRESULT hr = pConn2.CreateInstance("ADODB.Connection");
    if(SUCCEEDED(hr)){
    hr=pConn2->Open((_bstr_t)strConn1,"","",adConnectUnspecified);
    }
    if(SUCCEEDED(hr)){
    hr=pRst2.CreateInstance("ADODB.Recordset");
    }
    if(!SUCCEEDED(hr)){
    return FALSE;
    }
    }
    catch(_com_error *e){
    TRACE("Error Conn2:%s",e->ErrorMessage());
    delete e;
    }
    }