Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.251.217] |
|
Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем здравствуйте.
Есть основная база Access. Для расчетов необходимо создавать временную таблицу, которую потом либо удалять либо чистить. Расчеты нужны не постоянно, но ежедневно. Есть несколько вариантов: 1. Создать сразу таблицу, а чистить её до нужного расчета (на всякий случай) и после расчета. 2. Создавать таблицу до расчета, а после - удалять. И так - с каждым расчетом. Или - создавать таблицу при запуске программы, а удалять - при выходе из нее. Но встает проблема проверки, существует ли таблица, пока только через MSysObjects нашел вариант. 3. Создавать временную таблицу вообще в отдельном файле, т.е. в другой базе данных. Соответственно - при запуске программы файл создавать, при выходе - удалять. Не надо тогда проверять существование таблицы, т.к. файл стирается и создается принулительно. Такой вариант мне кажется более простым и удобным: основная база не будет увеличиваться в размерах и надежнее как-то кажется. Но насоклько это скажется на производительности - работа с тибалицами в разных базах? Если временную таблицу создавать в той же базе, то за несколько расчетов (от 10 до 15) база распухает примерно в 2 раза Еще проблема в том, что если взять вариант с созданием таблицы, то создавать её нужно только в том случае, если она не существует, и удалять - если существует. Как проверить? Анализировать выполнился запрос или нет не получается, т.к. он может либо просто не выполниться, либо выполниться некорректно. Какой вариант предпочтительнее? С базой работаю используя ADO, VC++ Спасибо за советы |
Сообщ.
#2
,
|
|
|
для временного хранения я использую таблицу, структуру которой храню в основной базе. по кнопке заношу в нее данные, потом запросом ее подчищаю.
еще использую для временного хранения представления view. но с ними возникает проблема: после работы с view - их нужно удалять, но на этапе отладки нередки ситуации, когда нужно удалять view до их использования (с проверкой конечно). я поднимал тему на форуме, как удалять view. резюме такое: нужно удалять view, а субд сама определит есть они или нет. мой Access97/2000 не определяет. удаляю (после удачного создания и работы с view's) вот так q.sql.Clear; q.SQL.Add('DROP VIEW Temper2, Temper3'); q.ExecSQL; т.е. при наличии VIEW я могу удалить все одним запросом. перед работой с запросами пытался удалять представления по одному, т.е. q.SQL.Add('DROP VIEW Temper2'); |
Сообщ.
#3
,
|
|
|
Цитата Kezya, 3.12.04, 07:47, 531135 Какой вариант предпочтительнее? чаше ползуюс вариантам 1 но и другими тоже. все они хороши. |
Сообщ.
#4
,
|
|
|
Цитата Kezya, 3.12.04, 06:47, 531135 Для расчетов необходимо создавать временную таблицу, которую потом либо удалять либо чистить Cоздавай массив и работай с ним. |
Сообщ.
#5
,
|
|
|
у меня клиент-серверное приложеньице, и я завел себе локально небольшую базу, и все временные таблицы храняться в ней, а не на серваке, удалять их я не удаляю, а просто чищу..
|
Сообщ.
#6
,
|
|
|
Массив совсем не удобно, к сожалению. А так да, было бы быстрее гораздо.
А если вынести таблицу в отдельный файл(т.е. в отдельную базу), почему бы тогда не создавать/удалять таблицу в ней, а просто чистить полностью через DELETE? Ну и наравне со сжатием основной базы сжимать и эту заодно. |
Сообщ.
#7
,
|
|
|
Цитата Kezya, 3.12.04, 13:02, 531510 Ну и наравне со сжатием основной базы сжимать и эту заодно Ну так это долго. И еще вариант использование VIEW. |
Сообщ.
#8
,
|
|
|
Цитата Bas,3.12.04, 14:17 @ Цитата Kezya, 3.12.04, 13:02, 531510 Ну и наравне со сжатием основной базы сжимать и эту заодно Ну так это долго. И еще вариант использование VIEW. Долго сжимать? Т.е. получается проще удалять временную таблицу из другой базы и все? |
Сообщ.
#9
,
|
|
|
2Kezya, после удаления (многократного) все равно база пухнет и ее нужно сжимать.
|
Сообщ.
#10
,
|
|
|
Цитата Kezya,3.12.04, 14:02 @ почему бы тогда не создавать/удалять таблицу в ней, а просто чистить полностью через DELETE? я тебе это и советовал |
Сообщ.
#11
,
|
|
|
Тогда я не понимаю, чем создание/удаление таблицы лучше простой очистки содержимого?
Я могу и ошибаться, но очистка меньше времени занимает? Добавлено PIL, Ага, я просто не ошидал, если честно, столь бурной дискуссии. Вариантов много, оказывается, ищу лучший |
Сообщ.
#12
,
|
|
|
прошу прощения за оффтоп, но сжатие меня заинтересовало..
в FoxPro - там было все просто - PACK, а как я могу сделать сжатие базы ACCESS со своей проги(VC++ +ADO)? |
Сообщ.
#13
,
|
|
|
Сжатие делается так:
в stdafx.h подключаешь dll-ку: #import "c:\Program Files\Common Files\System\ado\msjro.dll" no_namespace - например так try { CString strBasePath = "", strTmpPath = ""; strBasePath = //путь до базы данных strBasePath += "main_base.mdb"; strTmpPath += "base_tmp.mdb"; IJetEnginePtr jet(__uuidof(JetEngine)); CString strSrcConnection = "Data Source=" + strBasePath + ";Jet OLEDB:Database Password=" + sp + ";"; CString strDestConnection = "Data Source=" + strTmpPath + ";Jet OLEDB:Database Password=" + sp + ";Jet OLEDB:Encrypt Database=True;"; jet->CompactDatabase(_bstr_t(strSrcConnection), _bstr_t(strDestConnection)); } catch(_com_error &e) { ::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ; return FALSE; } Все, база сжалась. Но она находится сжатая в другом файле (base_tmp.mdb). Остается только подменить старый файл новым. Причем здесь сжатие с сохранением пароля на открытие базы. Добавлено Мне кажется, или до этого была какая-то хрень с соседней темой: Как проверяете существование таблицы?, ADO/Delphi/Access by tomsksmile? |
Сообщ.
#14
,
|
|
|
M Как проверяете существование таблицы?, ADO/Delphi/Access by tomsksmile? Разделена |
Сообщ.
#15
,
|
|
|
И все же: временная таблица лучше в другой базе? или без разницы?
|