用m_pRecordset->Open("SELECT *FROM maintable",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
操作数据库,添加,删除一切正常,就是在数据库里没有任何数据时,执行这个操作
出现类型不匹配的错误,也不可以用m_pRecordset->addnew(),调试发现
m_pRecordset是0x00000000,这是怎么回事啊?

解决方案 »

  1.   

    还有一个问题,我建立了一个空数据库,然后执行
    _variant_t ret;
    m_pConnection->Execute("create table user(id integer,name text,old integer,birthday datetime)",&ret,adCmdText);
    m_pConnection->Execute("insert into user values(1,'dwad',25,'1984/1/1')",&ret,adCmdText);
    也会程序崩溃,这是为什么啊?
    前面已经执行过
    HRESULT hr;
    try{
    hr=m_pConnection.CreateInstance("ADODB.Connection");
    if(SUCCEEDED(hr))
    {
    hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb","","",adModeUnknown);
    }
    }
    catch(_com_error &e)
    {
    CString errmsg;
    errmsg.Format("Failed to connect database\r\n Error Message:%s",e.ErrorMessage());
    AfxMessageBox(errmsg);
    }
    m_pRecordset.CreateInstance("ADODB.Recordset");
    着一段没有问题的.
      

  2.   

    InitInstance里面用了
    HRESULT hr=CoInitialize(NULL);
    没有
    ExitInstance里面
    ::CoUnInitiallize();m_pConnection.CreateInstance("ADODB.Connection");
    可能这里都没有创建出来
    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pRecordset.CreateInstance(__uuidof(Recordset));
      

  3.   

    inline _RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) {
        struct _Recordset * _result = 0;
        HRESULT _hr = raw_Execute(CommandText, RecordsAffected, Options, &_result);
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
        return _RecordsetPtr(_result, false);
    }
    错误出在这个地方,_result=0x00000000,
    这是怎么回事啊?