Поделиться через


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

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

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

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

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

Создание инструкции SQL с помощью DAO

В приведенном ниже примере показано, как создать объект 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)

Создание инструкции SQL с помощью DAO

В этом разделе вы создадите те же инструкции, что и в предыдущем разделе, но на этот раз в качестве метода доступа к данным используется 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 и обратная связь.