Чтобы очистить несколько терминологий:
Графический интерфейс MS Access состоит из пяти основных типов объектов: таблиц, запросов, форм, макросов и модулей.Технически, в MS Access нет такой вещи, как VBA macros .Это терминология из MS Excel, где каждая подпрограмма определена как макрос.
В MS Access есть физический объект, известный как макрос , который отделен от VBA (хотя может вызывать код VBA).Кодированные подпрограммы, которые включают все функции и подпрограммы в MS Access, инкапсулированы в модуль (объект), обычно за формами, отчетами или автономными модулями.
Помните, что каждое приложение Microsoft Office поддерживает свою собственную библиотеку объектов и не должно быть связано друг с другом.VBA сам по себе является отдельным компонентом, установленным по умолчанию (см. Инструменты \ Ссылки в IDE). Любой язык (Java, PHP, Python и т. Д.), Который может поддерживать COM-интерфейс, может подключаться и запускать библиотеку объектов каждого приложения Office.VBA - это просто один тип, который делает это.
MS Access поддерживает хранимые запросы (как другой объект), которые могут быть запросами действий (UPDATE
, INSERT
даже CREATE TABLE
или ALTER TABLE
) или запросы набора записей (SELECT
).Вам не нужно копировать весь код SQL внутри VBA для запуска этих сохраненных объектов запроса.На самом деле хранимые запросы выполняются более эффективно, чем строковые запросы, вызываемые в коде, поскольку механизм MS Access компилирует наилучший план выполнения с сохраненными запросами.
Сказав это, рассмотрим макросвызов нескольких OpenQuery действий или кодированных подпрограмм внутри модуля, вызывающий несколько DoCmd.OpenQuery
команд
Макрос
OpenQuery
QueryName: myfirstActionQuery
View: Datasheet
Data Mode: Edit
OpenQuery
QueryName: mySecondActionQuery
View: Datasheet
Data Mode: Edit
OpenQuery
QueryName: myThirdActionQuery
View: Datasheet
Data Mode: Edit
...
Для запросов действий вам не нужно закрывать запрос, поскольку OpenQuery
запускает процесс, не открывая ничего на экране.Возможно, вы захотите включить действие от SetWarnings
до False
, чтобы избежать появления сообщения о том, сколько записей будет обновлено или вставлено, что является настройкой по умолчанию в Access.Поскольку это потенциально опасное действие, нажмите Show All Actions
, чтобы увидеть это конкретное действие.
Модуль
Public Sub RunQueries()
DoCmd.SetWarnings False
DoCmd.OpenQuery "myfirstSavedQuery"
DoCmd.OpenQuery "mySecondSavedQuery"
DoCmd.OpenQuery "myThirdSavedQuery"
...
DoCmd.SetWarnings True
End Sub
Как и в макросах, закрывать необязательнозапрашивает действие и может вызывать DoCmd.SetWarnings
для подавления подсказок сообщения при каждом действии обновления, вставки или создания таблицы.
Альтернативой выключению и включению SetWarnings
является @ решение LeeMac , которое выполняет запросы с помощью команды DAO Database.Execute () .Фактически, поскольку DAO является частью библиотеки объектов MS Access, описанный выше метод можно запускать вне VBA, как указано выше.
Python
import os
import win32com.client
access_file = r'C:\Path\To\MyDatabase.accdb'
try:
oApp = win32com.client.Dispatch("Access.Application")
oApp.OpenCurrentDatabase(access_file)
db = oApp.Currentdb()
db.Execute("myFirstSavedQuery")
db.Execute("mySecondSavedQuery")
db.Execute("myThirdSavedQuery")
...
except Exception as e:
print(e)
finally:
oApp.Quit()
db = None; oApp = None
del db; del oApp