Нашел такое, но ошибка таже
| Код | bool __stdcall CompactMDB(AnsiString mdb,AnsiString pass1,AnsiString pass2) { bool ReturnValue; AnsiString tmp=ChangeFileExt(mdb,".tmp"); AnsiString Provider1="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+mdb+";Jet OLEDB:Engine Type=4"; AnsiString Provider2="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+tmp+";Jet OLEDB:Engine Type=4"; Variant AdoObj; try { if(FileExists(tmp)) DeleteFile(tmp); try { //AdoObj = CreateOleObject("JRO.JetEngine"); AdoObj = Variant::CreateObject("JRO.JetEngine"); } catch(Exception &ee) { ShowMessage("Err1 = "+ee.Message); };
try { AdoObj.OleProcedure("CompactDatabase",Provider1.c_str(),Provider2.c_str()); //<-- валится тут } catch(Exception &ee1) { ShowMessage("ErrComp = "+ee1.Message+"Возможно файл "+mdb+"занят другим приложением"); //<-- "Ошибка" }; //CopyFile(tmp.c_str(),mdb.c_str(),false); if(FileExists(mdb)) DeleteFile(mdb); RenameFile(tmp,mdb); ReturnValue=true; } catch(Exception &e) { ShowMessage("Err2 " + e.Message); ReturnValue=false; } AdoObj.Clear(); return ReturnValue; } //-----------------------------------------------------------------
|
|