![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервис->Служебные программы->Сжать и восстановить базу... [D7, Access]
Zif © (2004-11-06 00:21:00)Такой вопрос: Функция в 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;
sniknik (2004-11-08 01:01:00) [1]ну правильно, DoIfError как уже написал это своя функция по обработке ошибок (у меня логи там обычно пишутся имя модуля/класса ошибки/сама ошибка) ее тебе самому нужно писать
Exeption - ну ошибся, (прям сдесь правил) нужно Exception
MessageBox - не подключил модуль в котором описан (рядом с ComObj, пропиши Windows)
Zif (2004-11-06 15:04:00) [2]хотелось бы немного изменить данный пример:
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-06 09:30:00) [3]принцип один, но вариант лучше третий (хотя я бы и его чуть чуть изменил)
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;
привычнее так.
SergP (2004-11-06 08:21:00) [4]А разве они не одинаковые? Принцип то один...