Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сервис->Служебные программы->Сжать и восстановить базу... [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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо