我使用ADO,试过用一个 
 _ConnectionPtr m_pConnection; 
两个 
_RecordsetPtr m_pRecordset; 
_RecordsetPtr m_pRecordset1; 
  
然后这样连接 
hr = m_pRecordset.CreateInstance("ADODB.Recordset"); 
hr = m_pRecordset->putref_ActiveConnection(m_pConnection); 
  
hr = m_pRecordset1.CreateInstance("ADODB.Recordset1"); 
hr = m_pRecordset1->putref_ActiveConnection(m_pConnection); 
编译和链接都没问题,但运行则有问题 
我再创建一个    _ConnectionPtr m_pConnection1; 
然后这样连接 
hr = m_pRecordset.CreateInstance("ADODB.Recordset"); 
hr = m_pRecordset->putref_ActiveConnection(m_pConnection); 
hr = m_pRecordset1.CreateInstance("ADODB.Recordset1"); hr = m_pRecordset1->putref_ActiveConnection(m_pConnection1); 
问题依旧。我的两个_ConnectionPtr都是连到同一个数据库的。 
我需要在一个数据库里用两个_RecordsetPtr,请问用什么办法解决 ?

解决方案 »

  1.   

    m_pRecordset1.CreateInstance("ADODB.Recordset1"); ??
    是不是有错?“ADODB.Recordset1” ??我觉得应该改成ADODB.Recordset
      

  2.   

    不太明白你想干什么,再说清楚些,出了什么问题?两个_RecordsetPtr是否想指向不同记录?可以实现的,我用过。
      

  3.   

    我不是同时指向一个数据集的,只是用两个_RecordsetPtr 变量同时指向两个不同的表。
      

  4.   

    _ConnectionPtr m_pConnection;
    try
    {
        m_pConnection.CreateInstance("ADODB.Connection");
        m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data      Source=MyDB.mdb","","",adModeUnknown);
    }
    catch(_com_error e)///捕捉异常
    {
    AfxMessageBox(e.ErrorMessage ());

    _RecordsetPtr   MySet_Ip,MySet_Port,MyRvoice,MyRchanel;
    try
    {
    MySet_Ip.CreateInstance("ADODB.Recordset");
    MySet_Ip=m_pConnection->Execute ("SELECT Server_Ip FROM t_Server_Config",&RecordsAffected,adCmdText);
    MySet_Port.CreateInstance("ADODB.Recordset");
    MySet_Port=m_pConnection->Execute ("SELECT Server_Port FROM t_Server_Config",&RecordsAffected,adCmdText);

    MyRvoice.CreateInstance("ADODB.Recordset");
    MyRvoice=m_pConnection->Execute ("SELECT Record_Voice FROM t_Record_Voice",&RecordsAffected,adCmdText);
    MyRchanel.CreateInstance("ADODB.Recordset");
    MyRchanel=m_pConnection->Execute ("SELECT Record_Chanel FROM t_Record_Voice",&RecordsAffected,adCmdText);
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.ErrorMessage());///显示错误信息
    } _variant_t Holder_Ip,Holder_Port,Holder_Rvoice,Holder_Rchanel;
    try
    {
    handldata();
    }
    catch
    {
    AfxMessageBox(e.ErrorMessage());///显示错误信息
    } MySet_Ip->Close ();
    MySet_Port->Close();MyRvoice->MoveFirst ();
    MyRchanel->MoveFirst ();
    MyRvoice->Close ();
    MyRchanel->Close();m_pConnection->Close();这是我完成的一个项目中的部分代码,全部调试通过,没有问题的。