Составление временной таблицы, подобной поведению временной таблицы Oracle

предположим программист уже на самом деле делает это правильным способом

, Создание такой гипотезы, кажется, мне чрезвычайно плохая идея; в общем программном обеспечении феноменально ошибочно.

И в этом суть, действительно. Разработчики не могут разобраться в вещах, так обеспечение базы данных не может быть заполнено неправильными данными, Хорошая Вещь.

, Хотя в идеальном мире, естественные соединения использовали бы отношения (т.е. ограничения FK) вместо того, чтобы соответствовать именам столбцов. Это сделало бы FKs еще более полезный.

7
задан Oddthinking 8 August 2012 в 05:57
поделиться

6 ответов

Вы не исправитесь, Microsoft Access не поддерживает временные таблицы напрямую. Все таблицы, созданные в базе данных, должны быть явно удалены, чтобы удалить их, и они должны быть видны всем пользователям.

«Традиционный» способ обойти это - использовать две базы данных Access, одну с общими данными, а другую - для у каждого пользователя есть личная копия с элементами пользовательского интерфейса. Во второй базе данных есть таблицы из первой, связанные, и любые таблицы, созданные во второй базе данных, являются частными для пользователя. В таком случае (при условии, что вы не хотите сохранять данные, специфичные для пользователя), вы можете часто очищать частную базу данных и сжимать ее или даже периодически просто копировать новую из сети (вам нужно делать это для обновления пользовательского интерфейса. при внесении изменений.

3
ответ дан 7 December 2019 в 05:24
поделиться

Microsoft Access напрямую не поддержка временных таблиц

Если вы посмотрите на план выполнения запроса SHOWPLAN.OUT, станет ясно, что механизм имеет возможность создавать временные таблицы.

Если вы посмотрите на Справку Access 2007 , это может оказаться, что функциональные возможности временной таблицы могут быть легко доступны конечным пользователям:

Оператор CREATE TABLE

CREATE [TEMPORARY] TABLE ...

Когда создается таблица TEMPORARY , она виден только в рамках сеанса в который он был создан. это автоматически удаляется, когда сеанс прекращено. Временные таблицы могут быть доступ более чем одного пользователя.

Насколько я знаю, никто не придумал объяснения этой очевидной ошибки документации. Я сообщил об этом группе доступа, когда он появился в Access2003 (естественно, без ответа), то же самое и для Access2007. Кто знает, может быть, скоро появятся временные таблицы ...?

2
ответ дан 7 December 2019 в 05:24
поделиться

A Disconnected Recordset может подойти.

1
ответ дан 7 December 2019 в 05:24
поделиться

Ничего который автоматически удаляет все, кроме возможно отключенных наборов записей.

См. страницу TempTables.MDB на моем веб-сайте, где показано, как использовать временный MDB в вашем приложении.

1
ответ дан 7 December 2019 в 05:24
поделиться

Вы можете изучить использование транзакций. Таким образом, вы можете создать свою таблицу внутри транзакции, делать с ней все, что вам нужно, а затем откатить ее в конце, то есть избежать окончательной фиксации. Это также позволит вам избежать ADO, который необходим для отключенных наборов записей.

Вы не захотите создавать эту таблицу в своем внешнем или внутреннем интерфейсе, даже внутри транзакции, которая будет откатана, потому что это может привести к к фрагментации и раздуванию (хотя и не так сильно, как удаление страниц данных, которые были зафиксированы). То есть, хотя данные внутри еще не зафиксированной транзакции хранятся во временном файле, а не в целевой базе данных, несомненно, есть определенные накладные расходы, которых следует избегать. Таким образом, если бы я выполнял транзакцию, я '

1
ответ дан 7 December 2019 в 05:24
поделиться

Возможно, вы могли бы настроить базу данных доступа на сжатие и восстановление при закрытии. Для этого (в зависимости от вашей версии выполните следующие действия):

  1. Откройте базу данных Access или проект Access, который вы хотите, чтобы Microsoft Access сжимал автоматически.
  2. В меню «Сервис» выберите «Параметры».
  3. Щелкните вкладку Общие.
  4. Установите флажок Сжимать при закрытии.

Базы данных Access предназначены для постоянного увеличения размера. Когда вы удаляете запись из базы данных, пространство, выделенное для этой записи, продолжает оставаться в резерве для базы данных и не освобождается для повторного использования. Аналогичным образом, дополнительное пространство, созданное путем изменения и сокращения записей, не предоставляется для повторного использования. Уплотнение и ремонт облегчают это.

Утилита сжатия и восстановления уменьшает физический размер вашей базы данных, создавая точную копию базы данных, а также избавляя базу данных от лишнего пространства, созданного путем удаления и изменения данных. Утилита Compact Utility реструктурирует записи и объекты таблицы, а затем сохраняет их в последовательных блоках памяти, устраняя бесполезное пространство. Утилита также обновляет статистику таблицы, чтобы отразить характеристики базы данных реструктурированных данных. Чем больше добавлений, удалений и модификаций выполняется в базах данных, тем чаще они должны уплотняться

. ​​Если вы никогда не сжимаете базу данных доступа, ваша база данных сохранит «потраченное впустую» пространство и продолжит потреблять дополнительное пространство для размещения дополнительных данных. Например, если вы удалите все записи из базы данных Microsoft Access размером 1 МБ, а затем добавите 2 МБ данных, ваша база данных будет превышать 3 МБ. 1 МБ пространства, выделенного для удаленных записей, удерживается базой данных как потраченное впустую пространство, которое служит только для повреждения базы данных и фрагментации данных.

0
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: