我用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();
}
数据库文件反而变大了,这是为什么?
这下面的代码表示删除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();
}
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