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

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

удалить и создать БД [D2005, XP]


Страницы:   1 2

ыавпып ©   (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


Страницы:   1 2

Наверх

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