- Регистрация
- 9 Май 2015
- Сообщения
- 1,368
- Баллы
- 155
Access базу данных можно оптимизировать и исправить ошибки программно.
Код:
uses ComObj;
Procedure CompactDatabase_JRO(DatabaseName: String;
DestDatabaseName: String = ''; PassWord: String = 'Пароль если есть');
Const
Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
Var
TempName: Array [0 .. MAX_PATH] of Char;
TempPath: String;
Name: String;
Src, Dest: WideString;
V: Variant;
begin
try
Src := Provider + 'Data Source=' + DatabaseName;
if DestDatabaseName <> '' then
Name := DestDatabaseName
else
begin
TempPath := ExtractFilePath(DatabaseName);
if TempPath = '' Then
TempPath := GetCurrentDir;
GetTempFileName(PChar(TempPath), 'mdb', 0, TempName);
Name := StrPas(TempName);
end;
DeleteFile(PChar(Name));
Dest := Provider + 'Data Source=' + Name;
if PassWord <> '' then
begin
Src := Src + ';Jet OLEDB:Database Password=' + PassWord;
Dest := Dest + ';Jet OLEDB:Database Password=' + PassWord;
end;
V := CreateOleObject('jro.JetEngine');
try
V.CompactDatabase(Src, Dest);
finally
V := 0;
end;
if DestDatabaseName = '' then
begin
DeleteFile(PChar(DatabaseName));
RenameFile(Name, DatabaseName);
end;
except
on E: Exception do
ShowMessage(E.message);
end;
end;
procedure TForm1.DBOptimizer1Click(Sender: TObject);
Var
path, db, db1: string;
begin
GetDir(0, path);
db := path + '\db.mdb'; {имя таблицы и путь к ней}
With DM do
begin
ADOconnection1.Close;
end;
CompactDatabase_JRO(db, '', 'Пароль если есть');
With DM do
begin
ADOconnection1.Open;
ADOQuery1.Open;
end;
end;