MFC用ADO连接ACCESS数据库,内存持续增长

silverpal 2011-08-06 01:07:32
如题,我只是连接上数据库,读取一张表中的数据,然后就什么都没做了,但是任务管理器上显示内存一直在增长,每次512字节,不知道为什么.请大侠们指点一二.
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonglin 2011-09-13
  • 打赏
  • 举报
回复
等待解决方法
我在写表的时候遇到相同的问题,看了好久还是解决不掉!崩溃啊
silverpal 2011-08-06
  • 打赏
  • 举报
回复
bool CDbAdo::OpenRecordset(char* szSQL)
{
try
{
//关闭记录集
CloseRecordset();

m_ptrRecordset->Open(szSQL, m_ptrConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);

return true;
}
catch(_com_error& comError)
{
RecordErrorMsg(comError);
}

return false;
}

bool CDbAdo::CloseRecordset()
{
try
{
if(IsRecordsetOpened())
DetectResult(m_ptrRecordset->Close());
return true;
}
catch(_com_error& comError)
{
RecordErrorMsg(comError);
}

return false;
}
void CDbAdo::MoveToNext()
{
try
{
m_ptrRecordset->MoveNext();
}
catch(_com_error& comError)
{
RecordErrorMsg(comError);
}
}

void CDbAdo::MoveToFirst()
{
try
{
m_ptrRecordset->MoveFirst();
}
catch(_com_error& comError)
{
RecordErrorMsg(comError);
}
}
long CDbAdo::GetRecordCount()
{
try
{
if(m_ptrRecordset==NULL)
return 0;
return m_ptrRecordset->GetRecordCount();
}
catch(_com_error& comError)
{
RecordErrorMsg(comError);
}

return 0;
}
bool CDbAdo::GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue)
{
lValue = 0L;
try
{
_variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;
if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))
lValue = vtFld.lVal;
return true;
}
catch(_com_error& comError)
{
RecordErrorMsg(comError);
}

return false;
}
silverpal 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acaiacc 的回复:]

看看循环里面做了什么
每次都重新连接?
[/Quote]
我只连接了一次数据库,就一直保持连接的状态.开始读取数据前打开表,读取完成以后关闭表.
你指的循环是读取表中数据的循环吗?

if(DbAdo.OpenRecordset("select DateNum from HistoryRecord")==false)
{
AfxMessageBox(DbAdo.m_strErrorMsg,MB_OK | MB_ICONERROR);
}
else
{
long date_num;
long record_num=0;
record_num=DbAdo.GetRecordCount();
DbAdo.MoveToFirst();
for(int i=0;i<record_num;i++)
{
if(DbAdo.GetFieldValue(_T("DateNum"),date_num))
{
strTemp.Format(_T("%ld"),date_num);
m_DateNum.AddString(strTemp);
}
DbAdo.MoveToNext();
}
if(DbAdo.CloseRecordset()==false)
{
AfxMessageBox(DbAdo.m_strErrorMsg,MB_OK | MB_ICONERROR);
}
}
acaiacc 2011-08-06
  • 打赏
  • 举报
回复
看看循环里面做了什么
每次都重新连接?

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧