我在CVIew的构造函数写的这些代码
try{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
hr1=m_pRecordset.CreateInstance(_uuidof(mylib::Recordset));//初始化Recordset指针
hr = m_pConnection->Open(_bstr_t(strConnection),"","",mylib::adModeUnknown);///连接数据库
}
catch(_com_error& e)
{CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
然后在CView类里始终用一个数据源,采用recordset来实现不同表的处理的切换,并每打开一个就对应一个关闭.有些地方也用到了EXEcute命令,不知道什么原因,我的程序执行时有时能通过,有时就报错,说IDispatch error ,非常的莫名其妙阿,请各位大虾,给些可能出错的原因

解决方案 »

  1.   

    for(int j=0;j<4;j++)
    {sql_.Format("ALTER TABLE ReportDataA ADD COLUMN %s CHAR(20) NULL",m_fdlg.m_sEle[j]);
    sql=sql_;
    m_pRecordset->Open(sql,(IDispatch*)m_pConnection,mylib::adOpenDynamic,mylib::adLockOptimistic,mylib::adCmdText); 
    }
    出错代码如上.敬请诸位给予指点和帮助,不胜感激
      

  2.   

    for(int j=0;j<4;j++)
    {sql_.Format("ALTER TABLE ReportDataA ADD COLUMN %s CHAR(20) NULL",m_fdlg.m_sEle[j]);
    sql=sql_;
    m_pRecordset->Open(sql,(IDispatch*)m_pConnection,mylib::adOpenDynamic,mylib::adLockOptimistic,mylib::adCmdText); 
    }
    出错代码如上.敬请诸位给予指点和帮助,不胜感激
      

  3.   

    for(int j=0;j<4;j++)
    {sql_.Format("ALTER TABLE ReportDataA ADD COLUMN %s CHAR(20) NULL",m_fdlg.m_sEle[j]);
    sql=sql_;
    m_pRecordset->Open(sql,(IDispatch*)m_pConnection,mylib::adOpenDynamic,mylib::adLockOptimistic,mylib::adCmdText); 
    }
    出错代码如上.敬请诸位给予指点和帮助,不胜感激
      

  4.   

    1: 有没少了:CoInitialize(NULL)?2:把sql_.Format("ALTER TABLE ReportDataA ADD COLUMN %s CHAR(20) NULL",m_fdlg.m_sEle[j]);
    改成:sql_ = "ALTER TABLE ReportDataA ADD COLUMN %s “
          sql_ += m_fdlg.m_sEle[j])
          sql_ += " CHAR(20) NULL";
    看看?
      

  5.   

    我用的是 if (!AfxOleInit())
    {
    AfxMessageBox(IDP_OLE_INIT_FAILED);
    return FALSE;
    }
      

  6.   

    建议:如果是“ALTER”等,非SELECT语句,建议不要用m_pRecordset->Open方式。
    直接用m_pConnection-〉Execute();就可以啦。
      

  7.   

    我用得是vc +ado+access
    也试着用过execute
    可还是报错,
    会不会是access不支持语法啊?