???????????????????ACCESS?????洢?????ΧAIS?豸??????????????????????????в????????????????????????洢????????????????ν???2000???μ??λ???????Щ??????????????????С??????1M??2M???????????????????С???????????????40M????960M??
???????????????Ч????????????д洢???????????ж???????????30?????????????ACCESS?????delete?????????????????????????????е?????????????????????????????С?????
??????????????????????????????д????????????????????????????????????delete????????
??????????????£?

 

============================================
BOOL CPetrelProView::CompactDatabase()
{
WriteLog("===???????????==="??"COMPDB");
//::CoInitialize(NULL);
CString sDBFilePathName = GetModulePath() + "ShipSurvey.mdb";//????????
CString sDstDBFilePathName = GetModulePath() + "ShipSurvey_back.mdb";//??????
try
{
::DeleteFile(sDstDBFilePathName);//??????е???????
CFile::Rename(sDBFilePathName??sDstDBFilePathName);//?????????????????????
}
catch(...)
{
WriteLog("???????????"??"COMPDB");
return FALSE;
}
IJetEnginePtr jet(__uuidof(JetEngine));
BOOL bOK = TRUE;
try
{
//????????????????
CString sSrc;
sSrc.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password="??sDstDBFilePathName);
CString sDst;
sDst.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password="??sDBFilePathName);
long lResult = jet->CompactDatabase(_bstr_t(sSrc)??_bstr_t(sDst));
jet.Release();
//::CoUninitialize();
if(lResult == S_OK)
{
WriteLog("??????????ɡ?"??"COMPDB");
WIN32_FILE_ATTRIBUTE_DATA fad;
GetFileAttributesEx(sDBFilePathName??GetFileExInfoStandard??&fad);
CString sDBSize;
sDBSize.Format("???????????С??%.1fM"??fad.nFileSizeLow/1048576.0);
WriteLog(sDBSize??"COMPDB");
}
else
{
WriteLog("????????????"??"COMPDB");
CFile::Rename(sDstDBFilePathName??sDBFilePathName);//?????????????????????
bOK = FALSE;
}
}
catch(_com_error &e)
{
//::CoUninitialize();
WriteLog((LPCTSTR)e.Description()??"COMPDB");
WriteLog("????????????"??"COMPDB");
CFile::Rename(sDstDBFilePathName??sDBFilePathName);//?????????????????????
bOK = FALSE;
}
catch(...)
{
WriteLog("????????????"??"COMPDB");
CFile::Rename(sDstDBFilePathName??sDBFilePathName);//?????????????????????
bOK = FALSE;
}
WriteLog("===???????????==="??"COMPDB");
return bOK;
}
========================================================

??????????????????????????????????????????????????????????????????????????????????????????????????????????500M?????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????Щ???????????????????????VC?????????Щ????????????