Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Сервис->Служебные программы->Сжать и восстановить базу...   Найти похожие ветки 

 
Zif ©   (2004-11-06 00:21) [0]

Такой вопрос: Функция в Access Сервис->Служебные программы->Сжать и восстановить базу... За время прибывания на форуме я собрал несколько примеров, причем каждый раз предлагают новый вариант.
Какой из них лучше выбрать?

var JetEngine: olevariant;
begin
JetEngine:= CreateOleObject("JRO.JetEngine");
JetEngine.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+OldName+";",
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ NewName +";");
JetEngine:=unassigned;
end;


или...
procedure TPreLoadFr.CompactDataBase(const FileName:string);
const ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
var
DBEngine:variant;
Dest:string;
begin
Dest:=ExtractFilePath(FileName)+"compact.mdb";
DeleteFile(Dest);
DBEngine:=CreateOLEObject("JRO.JetEngine");
DBEngine.CompactDatabase(ConnStr+FileName,ConnStr+Dest);
RenameFile(Source,PChar(Source+".old"));
RenameFile(Dest,Source);
end;


или...
uses
ComObj;

function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var  
v: OLEvariant;
begin
Result := True;
try
  v := CreateOLEObject("JRO.JetEngine");
  try
    V.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB,
                      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB+"x;Jet OLEDB:Engine Type=5");
    DeleteFile(DB);
    RenameFile(DB+"x",DB);
  finally
    V := Unassigned;
  end;
except
  Result := False;
end;
end;


 
SergP ©   (2004-11-06 08:21) [1]

А разве они не одинаковые? Принцип то один...


 
sniknik ©   (2004-11-06 09:30) [2]

принцип один, но вариант лучше третий (хотя я бы и его чуть чуть изменил)


function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var  
v: OLEvariant;
begin
 Result := false;
 v := CreateOLEObject("JRO.JetEngine");
 try
    try
       V.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB,
                         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB+"x;Jet OLEDB:Engine Type=5");
       DeleteFile(DB);
       RenameFile(DB+"x",DB);
       Result := true;
    except
      on E: Exeption do DoIfError(E); {своя функция для обработки ошибки / показать сообщение / вести лог / хз. }
    end;
 finally
   V := Unassigned;
 end;
end;


привычнее так.


 
Zif ©   (2004-11-06 15:04) [3]

хотелось бы немного изменить данный пример:

uses
ComObj;

Button.Click
begin
 DataModule1.ADOConnection.Close;
 if(true = CompactAndRepair("Windows.mdb"))
 then
   MessageBox(Handle, "Ok", "Ok", MB_OK)
 else
   MessageBox(Handle, "Error", "Error", MB_OK);
 DataModule1.ADOConnection.Open;
end;

function CompactAndRepair(DB: string): Boolean;
var  
v: OLEvariant;
begin
Result := false;
v := CreateOLEObject("JRO.JetEngine");
try
 try
  V.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;User ID=мойлогин;Password=мойпароль;Data Source="+DB,
  "Provider=Microsoft.Jet.OLEDB.4.0;User ID=мойлогин;Password=мойпароль;Data Source="+DB+"x;Jet OLEDB:Engine Type=5");
   DeleteFile(DB);
   RenameFile(DB+"x",DB);
   Result := true;
 except
     on E: Exeption do DoIfError(E);
 end;
finally
  V := Unassigned;
end;
end;


Ошибки, которые выскакивали:
соответственно MessageBox Error
Exeption и DoIfError - неизвестные индитификаторы


 
sniknik ©   (2004-11-08 01:01) [4]

ну правильно, DoIfError как уже написал это своя функция по обработке ошибок (у меня логи там обычно пишутся имя модуля/класса ошибки/сама ошибка) ее тебе самому нужно писать

Exeption - ну ошибся, (прям сдесь правил) нужно Exception

MessageBox - не подключил модуль в котором описан (рядом с ComObj, пропиши Windows)



Страницы: 1 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
9-1091703136
pavel_pavel
2004-08-05 14:52
2004.12.05
TBitmap побыстрее


1-1100324580
Макс
2004-11-13 08:43
2004.12.05
определитель матрицы комплексных чисел


1-1100684507
Богдан
2004-11-17 12:41
2004.12.05
Заполнение полей TEdit


3-1099918293
LOMic
2004-11-08 15:51
2004.12.05
фильтрация в TDBGrigEh


14-1100517038
помаранчевий Жук
2004-11-15 14:10
2004.12.05
Искусство наследует жизнь или наоборот?