Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];
Внизудалить и создать БД Найти похожие ветки
← →
ыавпып (2007-06-04 14:48) [0]здраствуйте. подскажите пожалуйста как программно создать и удалить файл БД MSAccess? я так понимаю удалить можно просто вызвав DeleteFile? А вот как создать его?
← →
Megabyte © (2007-06-04 14:55) [1]Можно создать файл с расширением .mdb
← →
Elen © (2007-06-04 15:00) [2]
> А вот как создать его?
А там же поля ты какие-то предполагаешь? или ты не имееш ввиду "создать базу"?
← →
Anatoly Podgoretsky © (2007-06-04 15:02) [3]Вопрос смутный, сначала про удаление и создание БД, а в сообщение уже речь идет об файлах.
← →
ыавпып (2007-06-04 15:23) [4]наверное я непонятно объяснил, у меня есть БД которая сидит в файле glav.mdb, там есть таблицы, но самая главная это main_table, мне нужно удалить сам файл glav.mdb, и потом создать заново этот glav.mdb с таблицей main_table...
вопрос возник после вот этой темы http://delphimaster.net/view/2-1180444247/ теперь пытаюсь воплотить совет в жизнь...
> Megabyte
так к сожалению не получается: "неизвестный формат базы данных"...
← →
Elen © (2007-06-04 15:29) [5]
> "неизвестный формат базы данных"
Естесственно. Ты создал файл, но не создал базу. Создай на Аксесе glav_null.mdb с нужными тебе таблицами и скопируй его в glav.mdb. Потом если захочеш удалить glav.mdb просто проведи копирование пустышки glav_null.mdb в glav.mdb. т.е. работать с созданным тобой "шаблоном базы"
← →
Anatoly Podgoretsky © (2007-06-04 15:31) [6]Зачем удалять БД и потом снова ее создавать, она уже создана
← →
DVM © (2007-06-04 15:32) [7]Причем пустышку можно вообще хранить в ресурсах программы если хочется.
← →
ыавпып (2007-06-04 15:37) [8]
> Anatoly Podgoretsky
просто данных много она становится очень можно так сказать емкой, а данные должны храниться только 10 дней, а если удалять таблицы то размер файла БД не уменьшается, а со временем например будет 50 таблиц а сам файл будет весить сотни мегабайт как будто у меня там миллион таблиц...
> DVM
а можете рассказать или дать ссылку как это делать?
← →
DVM © (2007-06-04 15:40) [9]
> а если удалять таблицы то размер файла БД не уменьшается,
А выполнить стандартное сжатие не судьба?
← →
DVM © (2007-06-04 15:41) [10]
{ **** 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;
...
← →
Sergey13 © (2007-06-04 15:46) [11]> [9] DVM © (04.06.07 15:40)
> А выполнить стандартное сжатие не судьба?
А смысл? Что бы потом опять место выделять?
> [8] ыавпып (04.06.07 15:37)
Че то ты напроектировал странного, ИМХО? Откуда таблицы плодятся? Что за предметная область?
← →
Elen © (2007-06-04 15:51) [12]А вот у меня вопрос на засыпку : В Фоксе есть специально предназначенная команда ZAP которая опустошает базу (ее таблицы), соответственно размер файла уменьшается. Я знаю что есть метод EmptyTable он должен это делать. Разве в Аксесе такого нет?
← →
ыавпып (2007-06-04 16:02) [13]
> Sergey13
просто практически каждую секунду круглосуточно будут добавляться запись, причем еще там по времени определяется когда и что, отсюда и таблиц так много... я конечно понимаю что структура базы данной у меня не идеальна, но я просто лучше ничего придумать не смог... наверное потому что с бд, начал работать буквально накануне...
вообщем [10] реально помогло, спасибо DVM...
← →
Sergey13 © (2007-06-04 16:18) [14]> [13] ыавпып (04.06.07 16:02)
При такой нагрузке сжимать файл точно ни к чему. Просто будет тратиться дополнительное время на выделение дискового пространства в следующий раз при нехватке места. Просто прибивай периодически данные (если они не нужны) в таблицах (или сами таблицы, если они динамически содаются) и все.
← →
Anatoly Podgoretsky © (2007-06-04 16:31) [15]Я не уверен, что Акцесс повторно использует место.
← →
Sergey13 © (2007-06-04 16:34) [16]> [15] Anatoly Podgoretsky © (04.06.07 16:31)
Что, серьезно? Он работает как DBase - просто помечает и все?
← →
DVM © (2007-06-04 16:35) [17]
> Он работает как DBase - просто помечает и все?
да
← →
Sergey13 © (2007-06-04 16:41) [18]> [17] DVM © (04.06.07 16:35)
Аксес пал в моих глазах. 8-)
> [13] ыавпып (04.06.07 16:02)
Тогда мои советы - ф топку. 8-)
← →
Anatoly Podgoretsky © (2007-06-04 18:25) [19]> Sergey13 (04.06.2007 16:34:16) [16]
Я же написал, что не уверен, но мои наблюдения показывают, что это так и размер будет расти не только после вставки/удаления, но и при простом редактирование записи.
Акцесс делает безопасную "транзакцию" - сначала создается копия, потом удаляется старая запись, за счет этого очень высокая живучесть для файл-серверной БД
Но я не могу документировано это подтвердить.
← →
Anatoly Podgoretsky © (2007-06-04 18:27) [20]> Sergey13 (04.06.2007 16:41:18) [18]
А зря, они сумели создать живучею БД.
Меня другое не устраивает - это очень жидкий набор функций при работе через JET
В самом Акцесс набор функций великолепный, но это все VBA
← →
DVM © (2007-06-04 22:35) [21]
> Меня другое не устраивает - это очень жидкий набор функций
> при работе через JET
А меня не устраивает 2 Гб ограничение на файл. Откуда это глупое ограничение?
← →
Anatoly Podgoretsky © (2007-06-05 00:01) [22]> DVM (04.06.2007 22:35:21) [21]
Fat + Int32
← →
DVM © (2007-06-05 00:03) [23]
> Fat + Int32
Ну это дела файловой системы. Почему я могу создать файл больше двух гиг, а акцесс до текущей версии так и не научилась?
← →
Anatoly Podgoretsky © (2007-06-05 01:02) [24]> DVM (05.06.2007 00:03:23) [23]
Преемственность и никто не будет переводить на 64 битную математику. Кроме того Акцесс должен работать и на Win9x где это физическое ограничение.
← →
Zesik © (2007-06-05 02:14) [25]слушай а попробуй использовать другую СУБД
вот например на SQL severe элементарно удалять каждые 10 дней твои таблицы и создавать новые, а если напишешь тригер,тогда база вообще будет работать без твоего вмешательства
← →
ыавпып (2007-06-05 09:48) [26]
> Zesik
я с access только разобрался, а с SQL Server, я даже не знаю как работать, да и нету его у меня, я даже не знаю как там БД создать, никогда не работал с БД, а тут пришлось, если можно саму БД создать программно(т.е. файл) без установки дистриба MSSQL то можно попробовать с ней поработать... но тогда я попрошу помощи, как создать эту БД программно? или не стоит и рыпаться?
← →
ЮЮ © (2007-06-05 10:02) [27]не стоит и рыпаться.
Ибо SQL Server - это прежде всего сервер. Его и прсят создать и базу, и таблицы в ней, и записи в них. И без дистриба не обойтись :)
← →
Anatoly Podgoretsky © (2007-06-05 10:02) [28]> ыавпып (05.06.2007 09:48:26) [26]
Без установки движка нельзя, ни с MSSQL, ни с access
Движок бесплатно раздает Микрософт
Создавать базу почти везде одинаково - CREATE DATABASE name
← →
crypt © (2007-06-05 14:40) [29]Удалено модератором
← →
DVM © (2007-06-05 15:17) [30]
> А как сделать, что бы из Memo все переводилось в БД?
как это
← →
crypt © (2007-06-05 15:23) [31]Удалено модератором
← →
Sergey13 © (2007-06-05 15:37) [32]> [31] crypt © (05.06.07 15:23)
А это обязательно спрашивать в конце чужого, накак не связанного с твоим вопросом, топика?
← →
crypt © (2007-06-05 15:52) [33]Это же вопрос по БД! У меня спросили "как это" - я ответил!!!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.005 c