Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1181221488
Magedon
2007-06-07 17:04
2007.07.01
Регистрация DLL


2-1180983976
serg777
2007-06-04 23:06
2007.07.01
Закрасить фон


2-1181197047
MLN
2007-06-07 10:17
2007.07.01
Следить за изменениями в txt


2-1180953855
sergeyst
2007-06-04 14:44
2007.07.01
Как сделать чат?


2-1181379657
newones
2007-06-09 13:00
2007.07.01
Вопрос про проекцию





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский