Запрос sql в access vba: Метод DoCmd.RunSQL (Access) | Microsoft Learn

Метод DoCmd.RunSQL (Access) | Microsoft Learn





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья

  • Чтение занимает 2 мин

Метод RunSQL выполняет действие RunSQL в Visual Basic.

Синтаксис

expression. RunSQL (SQLStatement, UseTransaction)

expression: переменная, представляющая объект DoCmd.

Параметры

ИмяОбязательный или необязательныйТип данныхОписание
SQLStatementОбязательныйVariantСтроковое выражение, которое является допустимой инструкцией SQL для запроса действия или запроса определения данных. Он использует INSERT INTO, DELETE, SELECT… ИНСТРУКЦИИ INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX или DROP INDEX. Добавьте предложение IN, если вы хотите получить доступ к другой базе данных.
UseTransactionНеобязательныйVariantИспользуйте значение True (1), чтобы включить этот запрос в транзакцию. Используйте значение False (0), если вы не хотите использовать транзакцию. Если оставить этот аргумент пустым, предполагается значение по умолчанию (True).

Используйте действие RunSQL для выполнения запроса действия Microsoft Access с помощью соответствующей инструкции SQL. Вы также можете выполнить запрос определения данных.

Этот метод применяется только к базам данных Access.

Максимальная длина аргумента SQLStatement составляет 32 768 символов (в отличие от аргумента действия SQLStatement в окне Макрос, максимальная длина которого составляет 256 символов).

Пример

В следующем примере обновляется таблица Employees , изменяя название каждого менеджера по продажам на Региональный менеджер по продажам.

Public Sub DoSQL() 
 
    Dim SQL As String 
     
    SQL = "UPDATE Employees" & _ 
          "SET Employees.Title = 'Regional Sales Manager'" & _ 
          "WHERE Employees.Title = 'Sales Manager'" 
 
    DoCmd.RunSQL SQL 
     
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.






Создание инструкций SQL, которые включают переменные и элементы управления


  • Статья

  • Чтение занимает 3 мин

При работе с объектами доступа к данным (DAO) или объектами данных ActiveX (ADO) может потребоваться создать инструкцию SQL в коде. Иногда это называется «встраиванием» кода SQL.

Например, если создается новый объект QueryDef, необходимо присвоить его свойству SQL допустимую строку SQL. Но если вы используете объект Recordset ADO, необходимо присвоить его свойству Source допустимую строку SQL.

Чтобы сформировать инструкцию SQL, создайте запрос на бланке запроса, переключитесь в режим SQL, скопируйте и вставьте соответствующую инструкцию SQL в код.

Часто требуется создавать запрос на основе значений, предоставляемых пользователем, или значений, изменяющихся в разных ситуациях. В этом случае в запрос нужно включить переменные или значения элементов управления. Ядро СУБД Access обрабатывает все инструкции SQL, но не переменные или элементы управления. Поэтому необходимо создавать инструкцию SQL таким образом, чтобы Access сначала определял эти значения и затем объединял их в инструкции SQL, которая передается ядру СУБД Access.

В приведенном ниже примере показано, как создать объект QueryDef с простой инструкцией SQL. Этот запрос возвращает все заказы из таблицы Orders (Заказы), размещенные после 31 марта 2006 г.

Public Sub GetOrders() 
 
   Dim dbs As DAO.Database 
   Dim qdf As DAO.QueryDef 
   Dim strSQL As String 
 
   Set dbs = CurrentDb 
   strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-2006#;" 
   Set qdf = dbs. CreateQueryDef("SecondQuarter", strSQL) 
 
End Sub

В следующем примере создается такой же объект QueryDef с помощью значения, хранящегося в переменной. Следует помнить, что знаки номера (#), обозначающие значения дат, необходимо включить в строку, чтобы они были объединены со значением даты.

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Dim dteStart As Date 
dteStart = #3-31-2006# 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & dteStart & "#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

В приведенном ниже примере создается объект QueryDef с помощью значения в элементе управления OrderDate (Дата_заказа) в форме Orders (Заказы). Помните, что нужно предоставить полную ссылку на элемент управления и включить знаки номера (#), обозначающие дату в строке.

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & Forms!Orders!OrderDate & "#;" 
Set qdf = dbs. CreateQueryDef("SecondQuarter", strSQL)

В этом разделе вы создадите те же инструкции, что и в предыдущем разделе, но на этот раз в качестве метода доступа к данным используется ADO.

В приведенном ниже примере кода показано, как создать объект QueryDef с простой инструкцией SQL. Этот запрос возвращает все заказы из таблицы Orders (Заказы), размещенные после 31 марта 2006 г.

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-2006#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

В следующем примере создается такой же объект QueryDef с помощью значения, хранящегося в переменной. Следует помнить, что знаки номера (#), обозначающие значения дат, необходимо включить в строку, чтобы они были объединены со значением даты.

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Dim dteStart As Date 
dteStart = #3-31-2006# 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & dteStart & "#;" 
Set qdf = dbs. CreateQueryDef("SecondQuarter", strSQL)

В приведенном ниже примере кода создается объект QueryDef с помощью значения в элементе управления OrderDate (Дата_заказа) в форме Orders (Заказы). Помните, что он предоставляет полную ссылку на элемент управления и включает знаки номера, обозначающие дату в строке.

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & Forms!Orders!OrderDate & "#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Код Microsoft Access VBA с пунктом Select SQL String и Where

спросил

Изменено
2 года, 1 месяц назад

Просмотрено
1к раз

Я использую Microsoft Access для разработки приложения базы данных. Важной функцией, которая потребуется пользователю, является автоматическая отправка обновлений по электронной почте всем заинтересованным сторонам.

Проблема в том, что я получаю

Ошибка выполнения ‘3075’ Синтаксическая ошибка в выражении запроса.

Вот это ниже:

 Set rs = db.OpenRecordset("SELECT StakeholderRegister.[StakeholderID], StakeholderRegister.[ProjectID], StakeholderRegister.[FirstName], StakeholderRegister.[LastName], StakeholderRegister.[EmailAddress] " ​​& _
" ИЗ Реестра заинтересованных сторон " & _
" WHERE (((Реестр заинтересованных сторон.[ID проекта]=[Формы]![Журнал изменений]![cboProjectID.Value])) ;")
 

Забавно, что я создал таблицу запросов в Access, чтобы создать соответствующий набор записей, и включил представление SQL, чтобы скопировать точную строку sql, указанную выше. Этот запрос работает, однако он открывает поле «Входной параметр», тогда как этот код должен использовать значение, введенное в текстовое поле формы, в качестве критерия соответствия.

  • vba
  • мс-доступ

1

Чтобы использовать переменную в качестве параметра, не заключайте ее в кавычки:

 " ГДЕ StakeholderRegister.[ProjectID]=" & [Forms]![ChangeLog]![cboProjectID].[Value]
 

или просто

 " ГДЕ StakeholderRegister.ProjectID=" & Forms!ChangeLog!cboProjectID.Value
 

Примечание. Квадратные скобки нужны только тогда, когда в имени есть что-то вроде пробела, что в любом случае не лучшая практика.

Я также позволил себе удалить круглые скобки, так как они не нужны в таком простом предложении WHERE и могут вызвать больше проблем, чем пользы.

2

Попытка,

 Dim strSQL как строка
    strSQL = "SELECT StakeholderRegister.[StakeholderID], StakeholderRegister.[ProjectID], StakeholderRegister.[FirstName], StakeholderRegister.[LastName], StakeholderRegister. [EmailAddress] " ​​& _
    " ИЗ Реестра заинтересованных сторон " & _
    " WHERE StakeholderRegister.[ProjectID]=" & [Forms]![ChangeLog]![cboProjectID].Value & " ;"
Установить rs = Db.OpenRecordset(strSQL)
 

, если тип поля [ProjectID] текстовый, тогда

 Dim strSQL As String
    strSQL = "SELECT StakeholderRegister.[StakeholderID], StakeholderRegister.[ProjectID], StakeholderRegister.[FirstName], StakeholderRegister.[LastName], StakeholderRegister.[EmailAddress] " ​​& _
    " ИЗ Реестра заинтересованных сторон " & _
    " WHERE StakeholderRegister.[ProjectID]='" & [Forms]![ChangeLog]![cboProjectID].Value & "' ;"
Установить rs = Db.OpenRecordset(strSQL)
 

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Метод DoCmd.

RunSQL (доступ) | Microsoft Узнайте

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья
  • 2 минуты на чтение

Метод RunSQL выполняет действие RunSQL в Visual Basic.

Синтаксис

выражение . RunSQL ( SQLStatement , UseTransaction )

выражение Переменная, представляющая объект DoCmd .

Параметры

Имя Требуется/дополнительно Тип данных Описание
SQLStatement Требуется Вариант Строковое выражение, являющееся допустимым оператором SQL для запроса действия или запроса определения данных. Он использует оператор INSERT INTO, DELETE, SELECT…INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX или DROP INDEX. Включите предложение IN, если вы хотите получить доступ к другой базе данных.
ИспользованиеТранзакции Дополнительно Вариант Используйте True (1), чтобы включить этот запрос в транзакцию. Используйте False (0), если вы не хотите использовать транзакцию. Если оставить этот аргумент пустым, предполагается значение по умолчанию ( True ).

Используйте действие RunSQL для выполнения запроса действия Microsoft Access с помощью соответствующего оператора SQL. Вы также можете запустить запрос определения данных.

Этот метод применим только к базам данных Access.

Максимальная длина аргумента SQLStatement составляет 32 768 символов (в отличие от аргумента действия SQLStatement в окне макроса, максимальная длина которого составляет 256 символов).