您好:
  我用ACCESS数据库编写程序,我发现,挣加几条数据后,数据库变的很大,而且数据删除后仍然没有变化,我有一个30多兆的数据库,里面根本没数据,经过ACCESS本身压缩后才几十K,但是我们不能要求用软件的人都安装ACCESS,并且懂得压缩。那么我们怎么做。才能解决问题呢?

解决方案 »

  1.   

    摘抄一段我的一段程序: CString strWorkDir=::GetCurrentWorkDir();
    CString strDatabaseName=strWorkDir+lpDataBaseFileName;
    CString strDestDatabaseName=strWorkDir+"\\Tmp.mdb"; TRY
    {
    CFile::Remove( (LPCTSTR)strDestDatabaseName );
    }
    CATCH( CFileException , e)
    {
    #ifdef _DEBUG
    afxDump << "File " << ((LPCTSTR)strDestDatabaseName) << " cannot be removed\n";
    #endif
    e->Delete();
    }
    END_CATCH CString strConnetStringhead=_T("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=xxxxxx; Data Source=");
    CString strConnStr=strConnetStringhead+strDatabaseName;
    CString strDestStr=strConnetStringhead+strDestDatabaseName+_T(";Jet OLEDB:Engine Type=5");
    try
    {
    IJetEnginePtr jet(__uuidof(JetEngine));
    jet->CompactDatabase( (LPCTSTR)strConnStr, (LPCTSTR)strDestStr);
    }
    catch(_com_error e) 
    {       
    MessageBox(e.Description(), "数据库操作错误",MB_ICONSTOP) ; 
    ((CNetDocCabinetApp *)AfxGetApp())->ConnectDBS();
    return;
    }
    CFile::Remove((LPCTSTR)strDatabaseName);
    CFile::Rename((LPCTSTR)strDestDatabaseName,strDatabaseName);
      

  2.   

    #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",          "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;" \          "Jet OLEDB:Engine Type=4");}catch(_com_error &e) {          ::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;    }