关于CGridCtrl让我极度郁闷的问题。
2shcm 2007-07-16 04:28:40 几年前,学习VC数据库编程时写了个“ACCESS数据库”浏览器。但时是单文档+ ADO + ClistCtrl写的,没什么致命BUG。去年,我用多文档+Ado+CGridCtrl2.25 重写的程序。因为VCKABSE上看了CGridCtrl的介绍,还是错。但程序基本功能写差不多后发现一个致命BUG--当打开数据库多个表格时,或者分页多个页面时程序崩溃出错。VC++ 在DEBUG下CGridCtrl出错。
也许对CGridCtrl了解不多,反正一年多也没能解决这个郁闷的问题。现诚心向各位朋友请教。关于这个错误,有个规律。就是打开22个页面时,程序无法显示数据,当打开23个数据页面(表格)时程序就崩溃了。可能是什么指针问题,就不知道怎么解决!-_-
先谢谢各位朋友进来看此贴,帮顶给分!
程序出错页面图:
http://www.sswhgz.cn/jiage2008/mysoft/err.jpg
程序+测试MDB数据库:
http://www.sswhgz.cn/jiage2008/mysoft/pandmdb.rar
VC++源程序:
http://www.sswhgz.cn/jiage2008/mysoft/sjk.rar
相关代码:
CListView::OnInitialUpdate();
if (m_pGridCtrl == NULL)
{
m_pGridCtrl = new CGridCtrl;
if (!m_pGridCtrl) return;
CRect rect;
GetClientRect(rect);
m_pGridCtrl->Create(rect, this, 10);
m_pGridCtrl->EnableTitleTips(FALSE);
m_pGridCtrl->SetEditable(TRUE);
m_pGridCtrl->EnableDragAndDrop(FALSE);
m_pGridCtrl->SetBkColor(16777214);
}
CSplitterWnd* pSplitter = (CSplitterWnd *)GetParentFrame()->GetActiveView()->GetParent();
CShowInfo *m_pViewInfo=(CShowInfo*)pSplitter->GetPane(0,0);
m_nShowPageNum = atoi(theApp.strSetDB[0]); //参数->每页显示记录数
if(m_pViewInfo->m_nNowConnectDB>0)
{
long ColCount,i,j;
_variant_t varValue;
_bstr_t bstrValue;
CString m_strTmp;
SYSTEMTIME ti,ti2; //执行时间 时间精确到分钟
int n =0,m_nSize,nColumnCount= 0,nRecordCount=0;
GV_ITEM Item;
//m_pGridCtrl->DeleteAllItems();
/*
if (m_pGridCtrl)
delete m_pGridCtrl;
m_pGridCtrl = NULL;
OnInitialUpdate();
*/
if(m_strNowSQL != InputSQL) //判断是否更改SQL语句,如果没有那么就是翻页操作!
m_nThePageNum = 1; //m_nThePageNum 保存当前正在浏览的页面,用于书签
else
m_nThePageNum = m_nNowPage; //m_nNowPage 保存目前页面
GetSystemTime(&ti); //计算SQL执行时间
//这里执行SQL语句:略
}
else
AfxMessageBox(_T("您没有连接数据库呢!"));