我在对话框使用vsflexgrid(oledb)8.0 邦定Rs,仅仅显示了记录,关闭对话框正确。可主应用关闭窗体却报错,为什么?

解决方案 »

  1.   

    主要是:关闭数据库连接未知错误。在析构函数中如果删除窗体变量就直接关闭,见步骤2.
    调用是这样的:
    1:CMyDll中有一个CDlgUseFlexGrid,在其中放置控件vsflexgrid(oledb)8.0,在OnInitDialog()中,如下调用,即结果从数据库中读出并显示出来:
    m_ctrlVsGridData.SetFixedCols(0);
    m_ctrlVsGridData.SetRefDataSource(GetRSData(m_pAdoConn));
    m_ctrlVsGridData.SetColHidden(0,false);
    其中:_RecordsetPtr GetRSGjqyUpdate(CBBAdoConnection *pCon);
    2:然后在CMyDll中使用显示窗体的函数:
    void CMyDll::ShowFlexDlg(CBBAdoConnection *m_pDBCon)
    {
       if (m_pDlgUseFlexGrid == NULL) m_pDlgUseFlexGrid = new CDlgUseFlexGrid();
       CDlgUseFlexGrid *pDlgUseFlexGrid = (CDlgUseFlexGrid *)m_pDlgUseFlexGrid;
       pDlgUseFlexGrid->m_pAdoConn = m_pDBCon;
       pDlgUseFlexGrid ->DoModal();
    }~CMyDll()
    {
      if(m_pDlgUseFlexGrid != NULL) delete (CDlgUseFlexGrid *)m_pDlgUseFlexGrid;
        //注意:该句立即报错,内存溢出类错误,如果注掉,则在CMyAppView析构后关闭数据库连接未知错误?
    }
    3:CMyAppView.cpp中调用
        pMyDll->ShowFlexDlg();如果在dialog中onClose中,关闭连接,首先,CMyAppView.cpp其他地方需要使用.其次,如果关闭了连接,主应用窗体关闭时依然报错.
      

  2.   

    修正:
    其中:_RecordsetPtr GetRSGjqyUpdate(CBBAdoConnection *pCon);
    改为:_RecordsetPtr GetRSData(CBBAdoConnection *pCon);m_pDlgUseFlexGrid 声明如下:void* m_pDlgUseFlexGrid;
      

  3.   

    CDlgUseFlexGrid *pDlgUseFlexGrid = (CDlgUseFlexGrid *)m_pDlgUseFlexGrid;
       pDlgUseFlexGrid->m_pAdoConn = m_pDBCon;
       pDlgUseFlexGrid ->DoModal(); 还多加这个指针变量做什么
    当析构完m_pDlgUseFlexGrid后, pDlgUseFlexGrid不就成野指针了直接就用m_pDlgUseFlexGrid啊