代码如下:m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Temp.mdb", 
"", "", adModeUnknown); m_pConnection->PutCursorLocation(adUseClient); m_pRecordset = m_pConnection->Execute("select * from t_TempTable", varRecordCount, adCmdText); m_DGView.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_DGView.Refresh();
UpdateData(TRUE);执行的时候datagrid里的数据只是闪了一下就又没有了,为什么呢?

解决方案 »

  1.   

    BOOL CDlgRecordset::QueryRecord()
    {
    _CommandPtr cmd;  
    _RecordsetPtr rs;  
    _ConnectionPtr conn; 
    _variant_t vra;
    VARIANT *vt1 = NULL;
    try
    {
    /* cmd.CreateInstance( __uuidof(Command));
    rs.CreateInstance(__uuidof(Recordset));
    conn.CreateInstance(__uuidof(Connection));*/ UpdateData(TRUE);
    theApp.m_pConnection->PutCursorLocation(adUseClient);

    /* conn->CursorLocation = adUseClient;

    conn->Open(_bstr_t( theApp.m_pConnection.GetInterfacePtr() ), L"", L"", -1);
    cmd->ActiveConnection = conn;

       cmd->CommandText = (_bstr_t) m_strQuery;
    cmd->CommandType = adCmdText;
    rs = cmd->Execute(&vra,vt1, adCmdText);*/
    /*rs->PutRefActiveConnection(theApp.m_pConnection);
    rs->Open((_bstr_t)m_strQuery,
    theApp.m_pConnection.GetInterfacePtr(),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);*/
    ///     ((CTestDllApp*)(&theApp))->m_pConnection
    /// m_pRecordset.CreateInstance(__uuidof(Recordset));

    /* m_pRecordset->Open((_bstr_t)m_strQuery,
    _variant_t((IDispatch*)theApp.m_pConnection, TRUE),
    adOpenStatic,
    adLockOptimistic,
    adCmdText);*/
       if(m_pRecordset->State==1)
    {
    m_pRecordset->Close();
    }
    m_pRecordset->Open((_bstr_t)m_strQuery,
    theApp.m_pConnection.GetInterfacePtr(),//»ñÈ¡¿â½Ó¿âµÄIDispatchÖ¸Õë
    adOpenStatic,
    adLockOptimistic,
    adCmdText);
    /* m_DataGrid.SetRefDataSource(NULL);
    m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_DataGrid.Refresh();*/
    }
    catch (_com_error &e)
    {
    ::MessageBox(NULL,e.Description(),"Ìáʾ",MB_OK);
    }

    m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_DataGrid.Refresh();
    UpdateData(FALSE);
    //m_pRecordset->Close();
    return true;
     
    }
      

  2.   

    记录集里面的数据是没有问题的,这么说吧,我在后面加了一个AfxMessageBox("test");在显示这个对话框的时候是可以看到datagrid的数据的,messgeBox结束后datagird的数据就变成空白了
      

  3.   

    看看你MessageBox行,前后若干行的代码
      

  4.   

    void CDataGrid_TestDlg::OnOK() 
    {
    // TODO: Add extra validation here _variant_t *varRecordCount = new _variant_t(); UpdateData(TRUE);

    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pCommand.CreateInstance(__uuidof(Command));
    m_pRecordset.CreateInstance(__uuidof(Recordset)); try
    {
    m_pConnection->PutCursorLocation(adUseClient);

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=temp.mdb", 
    "", "", adModeUnknown); m_pRecordset->Open("select * from t_TempTable",
    m_pConnection.GetInterfacePtr(),
    adOpenStatic,
    adLockOptimistic,
    adCmdText); m_DGView.SetRefDataSource((LPUNKNOWN)m_pRecordset);

    UpdateData(false);

    } catch(_com_error *e)
    {
    AfxMessageBox(e->ErrorMessage());
    } if(m_pConnection->State)
    m_pConnection->Close();
      m_pConnection= NULL;
    }我知道问题的所在了,关键是我把connection关闭了,我把最后三行代码去掉就可以了。谢谢!