2012-01-09 3 views
2

У меня есть база данных Access, которую я использую для отчетности. После первоначальной загрузки необработанных данных я должен запустить некоторые запросы создания для создания некоторых кеш-таблиц (чтобы ускорить выполнение форм), а затем запустить некоторые обновления на некоторых вторичных таблицах. При запросе я запускаю макрос, который создает почти десяток этих справочных таблиц.Упорядочение данных в MS Access

Проблема, с которой я сталкиваюсь, заключается в том, что выполнение этих инструкций всегда приводит к появлению диалогового окна с просьбой подтвердить, что запуск созданного запроса приведет к удалению старой таблицы, предупреждая меня о том, что на диске недостаточно места/памяти для отмены (I подумайте, что это проблема внутреннего доступа, у моей рабочей станции много физических ресурсов), спрашивая меня, действительно ли действительно хочет поместить 1485672 строк в новую таблицу ... и делает это для каждого запроса. Есть ли способ установить ответ по умолчанию для всех этих операторов, чтобы я мог просто выполнить основной макрос и уйти на полчаса, вместо того, чтобы фиксировать и прижигать поток диалоговых окон? В идеале я бы хотел увидеть результат в окне консоли или в файле журнала, но я не знаю, легко ли это сделать.

Некоторые из запросов create-table выполняются непосредственно из макроса, но некоторые из них имеют больше логики и выполняются в коде (DoCmd.RunSQL "..."). У меня есть эта проблема с обоими типами запросов. Те же проблемы с операциями обновления (как обновления-запросы, а также выполняются как SQL в коде), а также с удалением.

+0

Вы можете установить предупреждения, но это применимо ко всем базам данных на ПК, поэтому важно включить их снова. Часто бывает лучше выполнять запросы, но все зависит от вашего кода. – Fionnuala

+0

@Remou: У меня есть эта проблема (слишком много диалогов), даже когда инструкции выполняются в коде, используя 'DoCmd.RunSQL '. Выберите blah в new_table из big_table.' ' – FrustratedWithFormsDesigner

+0

Это использует' RunSQL', а не 'Execute' – Fionnuala

ответ

2

Execute:

Dim db As Database 

Set db = CurrentDB 

db.Execute "Select blah into new_table from big_table", dbFailOnError 

Вы не получите (большинство?) Предупреждения.

В качестве бонуса вы можете проверить затронутые записи.

+0

Это выглядит многообещающе. Из того, что я сейчас прочитал, мне придется добавить код обработки транзакций/отката, и я потеряю индикатор выполнения внизу, но я думаю, что эти два могут стоить меньше неприятных диалогов. – FrustratedWithFormsDesigner

0

Вы можете использовать макрокоманды SetWarnings, документированные здесь: MSDN

+0

SetWarnings в коде необходимо избегать. – Fionnuala

+0

Обратите внимание, что установленные предупреждения затрагивают все базы данных на ПК, а не только базу данных, в которой используется эта команда. Это небезопасно. – Fionnuala

+0

Это, вероятно, хуже в макросах, чем в коде. Обертка блока кода с помощью Setwarnings false, а затем true - это обычное использование, если вы знаете, что код будет вызывать предупреждение, которое вы хотите подавить или показать другим. – dwo

Смежные вопросы