我在CDlialog1里面定义了_RecordsetPtr m_red;
在主程序里面CDialog里面定义了_ConnectionPtr m_con;
并且在主程序里面连接数据库成功。
在CDlialog1里面定义了CDialog指针m_purdlg,并初始化。
问题处在在:在CDlialog1里面m_red->Open("SELECT * FROM group",_variant_t((IDispatch*)(m_purdlg->m_con),true), adOpenStatic,adLockOptimistic,adCmdText);的时候程序崩溃了。请问什么原因啊?

m_red.CreateInstance(__uuidof(Recordset));
try{
m_red->Open("SELECT * FROM group",_variant_t((IDispatch*)(m_purdlg->m_con),true), 
adOpenStatic,adLockOptimistic,adCmdText);

解决方案 »

  1.   

    捕捉异常
    try{
    m_red->Open("SELECT * FROM group",_variant_t((IDispatch*)(m_purdlg->m_con),true),
    adOpenStatic,adLockOptimistic,adCmdText);
    }catch(_com_error e){MessageBox(e.Description());}
      

  2.   

    改成SELECT * FROM [group]试试。。
      

  3.   

    问题照样存在!。
    是不是我没有说清楚。我在一个类中连接了数据库。在另外一个类中用m_RecordsetPtr打开一个表的数据集。但是打开数据集的语句是整个程序崩溃了。且捕捉异常不能捕捉到。
      

  4.   

    调试发现错误由于:
    m_red->Open("SELECT * FROM group",_variant_t((IDispatch*)(m_purdlg->m_con),true), 
    adOpenStatic,adLockOptimistic,adCmdText); 
    中的:m_purdlg->m_con引起的。假如说:在同一个类中连接数据库得到_ConnectionPtr对象就不会出错。
      

  5.   

    调用其它类里面的_ConnectionPtr对象没有问题的啊,我们原来都这样做的,你确保你的m_purdlg没有被销毁?? 
      

  6.   

    m_purdlg应该没有被销毁,
    因为我的那个对话框一直存在呢。
      

  7.   

    inline _variant_t::_variant_t(IDispatch* pSrc, bool fAddRef) throw()
    {
    V_VT(this) = VT_DISPATCH;
    V_DISPATCH(this) = pSrc; // Need the AddRef() as VariantClear() calls Release(), unless fAddRef
    // false indicates we're taking ownership
    //
    if (fAddRef) {
    V_DISPATCH(this)->AddRef();
    }
    }问题出现在V_DISPATCH(this)->AddRef();这句了。说是读取位置 0x00000000 时发生访问冲突。
    请问什么原因啊。
      

  8.   

    知道问题情况的说说看。有谁遇到过。
    我昨天试了一下发现
    m_red->Open("SELECT * FROM group",_variant_t((IDispatch*)(m_purdlg->m_con),true), 
    adOpenStatic,adLockOptimistic,adCmdText); 
    m_purdlg->m_con这个值根本不能得到。
    但是说:我在要得到数据集的这个类中好像只能这么定义一个类的成员变量,在去得到另外一个类的数据。
      

  9.   

    不会吧,是不是你得到的m_purdlg指针不正确??
      

  10.   


    private:
    CHeadDlg *m_purdlg;
    在。cpp文件中:m_purdlg = new CHeadDlg;然后在调用。
    应该没有错啊。
      

  11.   

    你的m_con在CHeadDlg的什么地方初始化了并赋值了?? 你是不是在赋值前就在别的地方调用它了???