采用dao数据库引擎访问access数据库,程序只要实现对日志的自动备份即可,但是在软件测试中发现,如果连续向数据表(数据库中只有一个日志表)中写数据的话,当7000次左右的时候,系统就会崩溃,死在那里了,请高手指点,万分感谢!!写日志的代码段如下:
void ADDLOG(CString ID_1,     
CString ID_2,
CString State,          
CString Name,     
CString LogType,
CString Event,
CString LogDate)  
{
//1 判断日志审计开启/关闭
//2 判断是否存在Status,不存在则创建后向数据表中写日志记录,存在直接写日志记录
//3 向表单Status添加新的记录
CString strFileName="Status";
if (!CheckTable(strFileName))
{
CreateTable(); // 不存在则创建
} int tag=0;
tag  = AfxGetApp()->GetProfileInt("SYSCONFIG","CHECKLOG",0);
if (tag==1)
{
CDaoDatabase m_logDB; CString strPath;
CString strDBFile;
GetModuleFileName(NULL,strPath.GetBufferSetLength (MAX_PATH),MAX_PATH);
strPath.ReleaseBuffer();
int nPos;
nPos=strPath.ReverseFind ('\\');
strPath=strPath.Left(nPos);
CString strSr;
strSr = strPath+"\\log.mdb"; m_logDB.Open(strSr);// CDaoRecordset m_statusRS(&m_logDB);
CString str="select * from Status";
m_statusRS.Open(dbOpenDynaset,str);
int recordnum=0;
if (m_statusRS.IsBOF()&&m_statusRS.IsEOF())
{
recordnum=0;
}
else
{
m_statusRS.MoveLast();
recordnum=m_statusRS.GetRecordCount();
} m_statusRS.Close();
m_logDB.Close(); int SetRecordNum = AfxGetApp()->GetProfileInt("SYSCONFIG","LOGBACKUPTIME",1000);
if ( recordnum >= SetRecordNum)
{
CTime CreateTime;
CreateTime=CTime::GetCurrentTime();
CString strTime=CreateTime.Format("%Y%m%d%H%M%S");
CString strFileName="Log"+strTime+".mdb";
BackUpLog(strFileName);//备份日志文件
} CDaoDatabase m_AddDB;
m_AddDB.Open(strSr); CDaoRecordset m_AddRS(&m_AddDB);
m_AddRS.Open(dbOpenDynaset,str);
m_AddRS.AddNew();
m_AddRS.SetFieldValue("ID_1",(char *)(LPCTSTR)ID_1);
m_AddRS.SetFieldValue("ID_2",(char *)(LPCTSTR)ID_2);
m_AddRS.SetFieldValue("STATE",(char *)(LPCTSTR)State);
m_AddRS.SetFieldValue("NAME",(char *)(LPCTSTR)Name);
m_AddRS.SetFieldValue("LOGTYPE",(char *)(LPCTSTR)LogType);
m_AddRS.SetFieldValue("EVENT",(char *)(LPCTSTR)Event);
m_AddRS.SetFieldValue("LOGDATE",(char *)(LPCTSTR)LogDate);
m_AddRS.Update();
m_AddRS.Close(); m_AddDB.Close();
}
}

解决方案 »

  1.   

    你换成执行SQL语句插入试试。。
      

  2.   

    建议如果没有长字段的话(也就是字段内容比较短的情况)还是用SQL语句直接插入,你这样打开记录集挺浪费的,因为第次都是将整个记录集打开的。
    另外还是建议用ADO吧,请参考一下:http://blog.csdn.net/xsc2001/archive/2008/08/28/2841301.aspx
      

  3.   

    建议如果没有长字段的话(也就是字段内容比较短的情况)还是用SQL语句直接插入,你这样打开记录集挺浪费的,因为第次都是将整个记录集打开的。
    另外还是建议用ADO吧,请参考一下:http://blog.csdn.net/xsc2001/archive/2008/08/28/2841301.aspx