Автоматизация запросов Access 2007 (изменение одного критерия)

4494
Graphth

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

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

1

1 ответ на вопрос

2
Dave Becker

Существует простой способ заставить запрос запрашивать месяц при его запуске: в запросе поместите [Enter Month] в то же место, где у вас теперь есть название месяца.

Когда запрос выполняется, появится диалоговое окно для ввода месяца. Вы можете поместить любой текст в квадратные скобки - он не должен говорить «месяц»; это просто определяет, что скажет диалоговое окно. Этот метод называется «запросом параметров».

Выполнение всех 6 запросов за один шаг потребует кода VBA - но очень простой код. Ваши конечные пользователи не должны ничего знать о VBA - им нужно всего лишь открыть форму и нажать кнопку.

Создайте форму, поместите одну кнопку на нее. В списке свойств этой кнопки выберите вкладку «События», а затем событие «При нажатии». Нажмите кнопку «...» для события On Click.

Откроется окно кода VBA с курсором в правильном месте - Private Sub Command0_Click - где Command0 - это имя кнопки. Введите код, как показано ...

Подставьте правильные имена для ваших запросов и повторите строку кода столько раз, сколько необходимо. После открытия формы и нажатия кнопки все запросы будут выполняться одновременно.

Следующий шаг

Финальным улучшением будет ввод параметра один раз и автоматическое применение его ко всем запросам. Это требует нескольких шагов.

В окне кода VBA создайте код «Модуль». Щелкните правой кнопкой мыши на панели проекта окна и выберите «Вставить / Модуль»:

В новом модуле добавьте этот код:

gstrMonth - это строка глобальной переменной, которая содержит название месяца. Функция GetMonth будет использоваться в запросах для получения этого значения.

Теперь измените код Form1 на это:

В подпункте «AskForMonth» отображается диалоговое окно, в котором пользователь может ввести название месяца. Этот вход присваивается переменной gstrMonth.

В коде Command0 (кнопка) мы добавляем AskForMonth перед выполнением запроса. Снова, повторите строку «DoCmd» для каждого запроса с правильными именами запроса.

Последний шаг - заменить параметр в запросах вызовом функции «GetMonth». Вместо [Введите месяц] в критериях запроса поставьте «GetMonth ()».

Я надеюсь, что это побудит вас использовать некоторые возможности VBA для автоматизации ваших задач доступа!

Дэйв, спасибо за подробный ответ. Ваш последний абзац говорит о "последнем шаге". Это то, что мне действительно нужно помочь. Основываясь на ссылке, которую я указал в своем вопросе, я знаю, что могу изменить критерии, поместив весь оператор SQL в свой код и поместив туда переменную, возможно, получая ее значение из текстового поля формы. Мой вопрос, по сути, есть ли более простой способ (проще, чем использование SQL в VBA), чтобы сделать этот «последний шаг». Есть ли какие-то настройки, например, Queries ("Query1"). Field ("Month"). Criteria = "May"? Graphth 11 лет назад 0
Да, есть более простой способ. Вам не нужно помещать SQL в код VBA. Я отредактирую свой ответ, чтобы показать вам, как. Dave Becker 11 лет назад 0
@Graphth - Это тот ответ, который вы искали? Dave Becker 11 лет назад 0
Возможно, придется подождать, пока у меня появится шанс опробовать его. Graphth 11 лет назад 0
@Graphth - Это сработало для вас? Dave Becker 11 лет назад 0
@Graphth - Have you had a chance to try this? I hope it's the answer to your question! Dave Becker 11 лет назад 0

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