MS Access - выполнить сохраненный запрос по имени в VBA

20

Как выполнить сохраненный запрос в MS Access 2007 в VBA?

Я не хочу копировать и вставлять SQL в VBA. Я скорее просто выполнил имя запроса.

Это не работает... VBA не может найти запрос.

CurrentDb.Execute queryname
Теги:
ms-access

3 ответа

31
Лучший ответ

Вы можете сделать это следующим образом:

DoCmd.OpenQuery "yourQueryName", acViewNormal, acEdit

ИЛИ

CurrentDb.OpenRecordset("yourQueryName")
  • 1
    Я не хочу редактировать. Будет ли это выполнять мое обновление и вставлять запросы?
  • 0
    Да, он будет запускать запросы на обновление и вставку.
Показать ещё 2 комментария
7

Вам следует выяснить, почему VBA не может найти запрос.

У меня есть сохраненный запрос с именем qryAddLoginfoRow. Он вставляет строку с текущим временем в мою таблицу loginfo. Этот запрос выполняется успешно при вызове по имени CurrentDb.Execute.

CurrentDb.Execute "qryAddLoginfoRow"

Я предполагаю, что либо queryname - это переменная, содержащая имя запроса, которое не существует в текущей базе данных QueryDefs, либо имя запроса - это буквальное имя существующего запроса, но вы не заключили его в кавычки.

Edit: Вам нужно найти способ принять, что имя запроса не существует в текущей коллекции QueryDefs db. Добавьте эти 2 строки в код VBA непосредственно перед строкой CurrentDb.Execute.

Debug.Print "queryname = '" & queryname & "'"
Debug.Print CurrentDb.QueryDefs(queryname).Name

Вторая из этих двух строк вызовет ошибку 3265 во время выполнения, "Элемент не найден в этой коллекции". Затем перейдите в окно Immediate, чтобы проверить имя запрашиваемого запроса CurrentDb до Execute.

  • 0
    Это запрос на добавление, который работает вручную, но не в моем коде VBA. Могу ли я не использовать добавленный сохраненный запрос?
  • 0
    Запрос, который я описал, является запросом добавления ... он добавляет (добавляет) строку в мою таблицу loginfo.
2

Чтобы использовать CurrentDb.Execute, ваш запрос должен быть запросом действия, а в кавычках.

CurrentDb.Execute "queryname"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню