ADO 压缩 ACCESS

void CompactDB(LPCTSTR database)
{

    //本函数基于MFC
    //参数database 是要压缩的access文件名,必须是该.mdb文件的完整路径名

 

    //容易忘记的头文件引用:
    //#import   "MSJRO.DLL"   no_namespace                                                                                   //拷贝 MSJRO.DLL 到工程目录
    //#import   "C://Program Files//Common Files//System//ado//MSJRO.DLL"   no_namespace      //应确认C://Program Files//Common Files//System//ado//MSJRO.DLL文件存在

 


    CString tempfile=database;
    tempfile=tempfile.Left(tempfile.ReverseFind('//'));   
    tempfile+="//temp.mdb";

    remove(tempfile);
    try  
    { 
        CoInitialize(NULL);                                                   //总是忘记初始化COM环境 
        IJetEnginePtr   jet(__uuidof(JetEngine));
        CString srcdb;
        CString destdb;
        srcdb.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=%s;",database);
        destdb.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=%s;Jet OLEDB:Engine Type=5",tempfile);
        jet->CompactDatabase(  
            (_bstr_t)(LPCTSTR)srcdb,    
            (_bstr_t)(LPCTSTR)destdb);  
       
        CoUninitialize();  
    }  
    catch(_com_error &e)    
    {                
        ::MessageBox(NULL,(LPCTSTR)e.Description(),"",MB_OK) ;          
    }     
    remove(database);   
    rename(tempfile,database);
}

你可能感兴趣的:(ADO 压缩 ACCESS)