-
Получаю данные в программу через ADO и заметил что через некторое время база через которую идет обмен (Access) пухнет просто в разы. Кто-нибудь знает что это такое и как привести базу в начальное состояние?
-
удалённые записи помещаются в "Корзину", а не удаляются вообще. Была там какая-то опция, то-ли упаковать базу, то-ли как-то ещё...
-
> база через которую идет обмен
если данные при обмене удаляются, потом на их место появляются новые и сначала, то размер со времемен стабилизируется, т.к. место в корзине начинает использоваться повторно
-
То есть в базе данных Access есть "корзина"? И как до нее добраться?
-
> как до нее добраться?
с какой целью? если чистить - есть упаковка для других целей - не стоит оно того
-
Ок, я хочу очистить все буферы и корзины в конце каждой сессии, как мне это 1сделать через TADOTable?
-
> как мне это 1сделать через TADOTable?
Никак.
-
> в конце каждой сессии
это занятие для админа базы, а не пользователя, особенно если он не один
-
Попробуйте следующую функцию: (на всякий случай предварительно сохраните оригиналный *.mdb)
resourcestring
SJETENGINE = 'JRO.JetEngine';
SQLCOMPACTSRC = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
SQLCOMPACTSRC1 = 'x;Jet OLEDB:Engine type=5';
function CompactAndRepair(const DB: String) : boolean;
var V: OLEvariant;
begin
Result := True;
try
V:= CreateOLEObject(SJETENGINE);
try
V.CompactDatabase(SQLCOMPACTSRC + DB, SQLCOMPACTSRC + DB + SQLCOMPACTSRC1);
DeleteFile(Pchar(DB));
MoveFile(Pchar(DB + 'x'), Pchar(DB))
finally
v:= Unassigned
end;
except
Result := False
end;
end;
-
Если речь идет о редко выполняемой операции, то проще всего будет открывать базу самим Access и выполнять команду "Сжать и восстановить". Можно также настроить автоматическое сжатие и восстановление, которое будет происходить каждый раз при закрытии Access-а.
-
|