我用ADO操作access2000数据库,在删除某张表的一些记录后,
数据库文件反而变大了,这是为什么?
这下面的代码表示删除listctrl里面选中的邮件
void CQuery3View::OnDeleteSendemail() //删除发件箱邮件
{
// TODO: Add your command handler code here
CString strSQL,strFilter;
int nItem;
strSQL=_T("select * from sendbox");
m_adoRecordSet.Open(strSQL);
POSITION pos=m_emailList.GetFirstSelectedItemPosition();
while (pos) 
{
nItem=m_emailList.GetNextSelectedItem(pos);
strFilter.Format("id=%d",m_emailList.GetItemData(nItem));
m_adoRecordSet.SetFilter(strFilter);
m_adoRecordSet.Delete();
                  m_adoRecordSet.Update();
}
m_adoRecordSet.SetFilter("");
m_adoRecordSet.Close();
m_emailList.DeleteAllItems();
ReadSendBoxData();
}

解决方案 »

  1.   

    access在存储大量数据后它文件本身也会增大,即使你把数据删除了也不行.但你可以通过压缩数据库的功能来减小它.所以用程序也得这样做.虽然我不知道怎么用vc来做这项工作
      

  2.   

    Besides #import, the Msado15.dll (MDAC2.1), add the following #import statement to generate the wrapper classes for JRO to your .cpp classes (alternatively, you can generate the wrapper classes more efficiently by using the no_implementation and implementation_only attributes of the #import pre-processor statement):#import "C:\PROGRAM FILES\COMMON FILES\System\ado\MSJRO.DLL" no_namespace 

    Add the following (specifying your own source and destination database paths) to the .cpp file where you want to compact the database:...
    try
    {
       IJetEnginePtr jet(__uuidof(JetEngine));
      jet->CompactDatabase( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb;Jet OLEDB:Database Password=test", 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;" \ 
    "Jet OLEDB:Engine Type=4;Jet OLEDB:Database Password=test");
    }
    catch(_com_error &e) 
    {       
       ::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;  
    }Q230501       Compacting an Access Database via ADO
      

  3.   

    access的删除有点像foxbase的标记删除,数据库记录并没有从物理上消失,需要对其进行压缩
      

  4.   

    错了,该回答是另外一个问题的。access的记录删除后空间并没有回收,需要压缩才能变小,我曾经遇到过上G的access数据库,压缩后只需要几十k。
      

  5.   

    access删除后,有记录存在的,需要压缩
      

  6.   

    问题解决,感谢,特别是laiyiling(陌生人_潜心钻研MS技术)