Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизСервис->Служебные программы->Сжать и восстановить базу... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c