Как перестроить исходные таблицы активной формы?

У меня есть форма доступа, исходными данными которой являются 2 таблицы, назовем их TblA и TblB. Эта форма имеет элемент управления, который должен:

  1. Захватите некоторые новые данные от пользователя в 3-ю таблицу.
  2. Запустите maketable запросы, воссоздающие TblA и TblB с новыми данными.
  3. Запросить и обновить форму.

Однако у меня возникла проблема. Запросы maketable терпят неудачу. Я предполагаю, что это потому, что у меня открыта основная форма. Вот фрагмент кода:

Dim AccDB As New Access.Application
AccDB.OpenCurrentDatabase DbLoc
AccDB.DoCmd.OpenQuery "TblA-Rebuild"
AccDB.DoCmd.OpenQuery "TblB-Rebuild"
Forms("Frm").Requery

Мой вопрос: как переписать этот процесс, чтобы успешно перестроить эти таблицы?


person PowerUser    schedule 19.04.2011    source источник
comment
Что произойдет, если вы установите для источника строки значение «ничего», создайте свою таблицу, а затем попробуйте перепривязать форму? В противном случае вы можете отказаться от формы?   -  person Kevin Ross    schedule 19.04.2011
comment
Основываясь на вашем предложении, я добавил код для сохранения источника записи формы, установил для него значение null, выполнил запросы и вернул его к исходному состоянию. Но у меня все еще та же проблема.   -  person PowerUser    schedule 19.04.2011
comment
После изменения структур таблиц TblA и TblB вам также нужно изменить элементы управления формы для работы с измененными структурами таблиц?   -  person HansUp    schedule 19.04.2011
comment
@Hansup, в таблицах нет специальных настроек, а запросы MakeTable очень стандартны. Что бы ни создавали запросы MakeTable, форма использует.   -  person PowerUser    schedule 19.04.2011
comment
Я никогда не развертывал MakeTable в рабочем приложении. Это то, что полезно для обмена данными, архивирования данных и тому подобного, но не относится к рабочему приложению. Вместо этого создайте таблицу во временной базе данных с соответствующей структурой, очистите ее и добавьте в нее данные по мере необходимости. Это полностью устранит проблему, с которой вы столкнулись, потому что вы будете изменять только данные, а не саму таблицу.   -  person David-W-Fenton    schedule 26.04.2011
comment
Спасибо, Дэвид. Это вариант, который я в конечном итоге выбрал, и он отлично работает.   -  person PowerUser    schedule 26.04.2011


Ответы (2)


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

person TheOtherTimDuncan    schedule 19.04.2011
comment
Сначала я колебался с этой идеей, потому что она казалась слишком сложной. Но теперь я понимаю, что это намного проще, чем другие варианты. - person PowerUser; 19.04.2011

Я бы встроил вашу существующую форму в подчиненную форму, которая не привязана к таблице. Затем вы можете закрыть свою подчиненную форму, пока вы переделываете таблицы, и открыть ее снова.

person Beth    schedule 19.04.2011