我需要打开一个数据库里面的多个表单,提取数据进行操作。请问如何同时打开多个表单呢?我现在是重复打开2次数据库,运行时报错。只打开一次数据库,取2次记录集也会报错。 m_pConnection.CreateInstance(__uuidof(Connection));
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TF.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}m_pRecordset.CreateInstance(__uuidof(Recordset));try
{
m_pRecordset->Open("SELECT * FROM 主线",                // 查询DemoTable表中所有字段
       m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
       adOpenDynamic,
       adLockOptimistic,
       adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}m_pConnection_zd.CreateInstance(__uuidof(Connection));
HRESULT hr_zd;
try
{
hr=m_pConnection_zd.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr_zd))
{
hr=m_pConnection_zd->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TF.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}



m_pRecordset_zd.CreateInstance(__uuidof(Recordset));try
{
m_pRecordset_zd->Open("SELECT * FROM 匝道",                // 查询DemoTable表中所有字段
       m_pConnection_zd.GetInterfacePtr(), // 获取库接库的IDispatch指针
       adOpenDynamic,
       adLockOptimistic,
       adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

解决方案 »

  1.   

    http://blog.csdn.net/zyq5945/archive/2010/04/29/5541280.aspx
    你捕获错误方式不对,换成下面试试
    //打印调用ADO控件时产生的详细错误信息
    void dump_com_error(_com_error &e)
    {
    CString ErrorStr;
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    ErrorStr.Format( "\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n",
    e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription );
    //在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息
    ::OutputDebugString((LPCTSTR)ErrorStr);
    #ifdef _DEBUG
    AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);
    #endif
    }try
    {
    //你的ADO代码
            
    }
    catch(_com_error& e)
    {
    dump_com_error(e);
      

  2.   

    打开一次也试过了,
    使用两个不同的m_pRecordset指针来获取两个表单,报错。
    使用同一个m_pRecordset指针获取两个表单,报错。
      

  3.   

    我知道不是这个原因,但错误出来你用_com_error *e是看不到错误的,程序仅仅是异常退出。
      

  4.   

    ADO Error
    Code= 800a0e7d
    Code meaning =Unknown error 0x800A0E7D
    Source = ADODB.RecordSet
    Description= 连接无法用于执行此才操作。在此上下文中它可能已被关闭或无效。
      

  5.   

    m_pConnection可以在全局区打开,比如MFC工程可以在APP里面打开,一个数据库文件打开一次就可以了,但记住在程序退出的时候关闭。m_pRecordset可以建多个,只要是前面同一个打开的m_pConnection数据库,就重复用它