![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
удалить и создать БД [D2005, XP]
ыавпып © (2007-06-04 14:48:00)здраствуйте. подскажите пожалуйста как программно создать и удалить файл БД MSAccess? я так понимаю удалить можно просто вызвав DeleteFile? А вот как создать его?
ыавпып (2007-06-04 16:02:00) [21]
> Sergey13
просто практически каждую секунду круглосуточно будут добавляться запись, причем еще там по времени определяется когда и что, отсюда и таблиц так много... я конечно понимаю что структура базы данной у меня не идеальна, но я просто лучше ничего придумать не смог... наверное потому что с бд, начал работать буквально накануне...
вообщем [10] реально помогло, спасибо DVM...
Elen (2007-06-04 15:51:00) [22]А вот у меня вопрос на засыпку : В Фоксе есть специально предназначенная команда ZAP которая опустошает базу (ее таблицы), соответственно размер файла уменьшается. Я знаю что есть метод EmptyTable он должен это делать. Разве в Аксесе такого нет?
Sergey13 (2007-06-04 15:46:00) [23]> [9] DVM © (04.06.07 15:40)
> А выполнить стандартное сжатие не судьба?
А смысл? Что бы потом опять место выделять?
> [8] ыавпып (04.06.07 15:37)
Че то ты напроектировал странного, ИМХО? Откуда таблицы плодятся? Что за предметная область?
DVM (2007-06-04 15:41:00) [24]
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Программное сжатие базы данных Access используя JRO (Jet Replication Objects)
Процедура позволяет сжать базу данных в формате Access,
используя JRO (Jet Replication Objects). Действие аналогичное
пункту меню в Access "Сервис -> Служебные программы ->
Сжать и восстановить базу данных".
Параметры:
* DatabaseName - путь к исходной (не сжатой) базе данных
* DestDatabaseName - путь к сжатой базе данных
(по умолчанию пустой - в этом случае исходная база заменяется сжатой)
* Password - пароль базы данных (по умолчанию пустой)
PS. этот код был написан в связи с тем что аналогичная процедура
через DAO у многих не работала (по пока неизвестным для меня причинам)
Зависимости: windows,SysUtils,ComObj,Dialogs (Dialogs можно исключить
используя MessageBox для вывода сообщения исключительной ситуации)
Автор: savva, savva@nm.ru, ICQ:126578975, Орел
Copyright: Сапронов Алексей (Savva)
Дата: 9 сентября 2002 г.
***************************************************** }
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;
Пример использования:
...
db.Close;
CompactDatabase_JRO('c:\database.mdb',
'c:\Archiv\database_pack.mdb', 'password');
db.open;
...
DVM (2007-06-04 15:40:00) [25]
> а если удалять таблицы то размер файла БД не уменьшается,
А выполнить стандартное сжатие не судьба?
ыавпып (2007-06-04 15:37:00) [26]
> Anatoly Podgoretsky
просто данных много она становится очень можно так сказать емкой, а данные должны храниться только 10 дней, а если удалять таблицы то размер файла БД не уменьшается, а со временем например будет 50 таблиц а сам файл будет весить сотни мегабайт как будто у меня там миллион таблиц...
> DVM
а можете рассказать или дать ссылку как это делать?
DVM (2007-06-04 15:32:00) [27]Причем пустышку можно вообще хранить в ресурсах программы если хочется.
Anatoly Podgoretsky (2007-06-04 15:31:00) [28]Зачем удалять БД и потом снова ее создавать, она уже создана
Elen (2007-06-04 15:29:00) [29]
> "неизвестный формат базы данных"
Естесственно. Ты создал файл, но не создал базу. Создай на Аксесе glav_null.mdb с нужными тебе таблицами и скопируй его в glav.mdb. Потом если захочеш удалить glav.mdb просто проведи копирование пустышки glav_null.mdb в glav.mdb. т.е. работать с созданным тобой "шаблоном базы"
ыавпып (2007-06-04 15:23:00) [30]наверное я непонятно объяснил, у меня есть БД которая сидит в файле glav.mdb, там есть таблицы, но самая главная это main_table, мне нужно удалить сам файл glav.mdb, и потом создать заново этот glav.mdb с таблицей main_table...
вопрос возник после вот этой темы http://www.delphimaster.ru/cgi-bin/forum.pl?id=1180444247&n=18теперь пытаюсь воплотить совет в жизнь...
> Megabyte
так к сожалению не получается: "неизвестный формат базы данных"...
Anatoly Podgoretsky (2007-06-04 15:02:00) [31]Вопрос смутный, сначала про удаление и создание БД, а в сообщение уже речь идет об файлах.
Elen (2007-06-04 15:00:00) [32]
> А вот как создать его?
А там же поля ты какие-то предполагаешь? или ты не имееш ввиду "создать базу"?
Megabyte (2007-06-04 14:55:00) [33]Можно создать файл с расширением .mdb