access sql запрос с параметрами

Содержание

  1. Параметрические SQL запросы или запросы с параметрами в СУБД Access 2003 и 2007
  2. Синтаксис Syntax
  3. Примечания Remarks
  4. Пример Example

Параметрические SQL запросы или запросы с параметрами в СУБД Access 2003 и 2007

В данной статье рассмотрим параметрические SQL запросы или запросы с параметрами на выборку данных из таблиц БД Access. Для создания SQL запроса откроем базу данных sql_training_st1_calcul.mdb.

Известно, что для извлечения информации, хранящейся в базе данных БД Access 2003 или 2007, можно применить запрос SELECT на выборку данных из таблиц. Что касается запроса с параметрами, то он извлекает данные лишь в том случае, когда в диалоговом окне «Введите значение параметра» будет введено имя параметра отбора.

Составим параметрический SQL запрос (инструкцию SQL), для этого в открытой БД sql_training_st1_calcul.mdb на вкладке «Создание» выберем команду «Конструктор запросов». Откроется активное окно диалога «Добавление таблицы» на фоне неактивного окна «Запрос1», далее надо закрыть окно диалога «Добавление таблицы». Затем на контекстной вкладке «Конструктор» выберем режим SQL, выполнив команду SQL, в результате в окне редактирования будет отображаться оператор SELECT.

Вводим с клавиатуры следующую инструкцию SQL:
SELECT Группы.Название, Студенты.Фамилия, Дисциплины.Название, Успеваемость.Оценка
FROM (Группы INNER JOIN Студенты ON Группы.КодГруппы = Студенты.КодГруппы) INNER JOIN (Дисциплины INNER JOIN Успеваемость ON Дисциплины.КодДисциплины = Успеваемость.КодДисциплины) ON Студенты.КодСтудента = Успеваемость.КодСтудента
WHERE ((Студенты.Фамилия)=[Введите фамилию])
ORDER BY Студенты.Фамилия;

Эта инструкция состоит из четырех предложений «SELECT. . .», «FROM. . .», «WHERE. » и «ORDER BY. «.
Первое предложение содержит оператор SELECT и идентификатор «Группы.Название, Студенты.Фамилия, Дисциплины.Название, Успеваемость.Оценка». Выбор данных осуществляется из четырех полей четырех таблиц. Чтобы однозначно идентифицировать поля в запросе, перед именами полей указаны имена таблиц (например, Группы.Название).

Второе предложение содержит оператор FROM и идентификатор «(Группы INNER JOIN Студенты ON Группы.КодГруппы=Студенты.КодГруппы) INNER JOIN (Дисциплины INNER JOIN Успеваемость ON Дисциплины.КодДисциплины=Успеваемость.КодДисциплины) ON Студенты.КодСтудента=Успеваемость.КодСтудента».

FROM — определяет таблицы «Группы», «Студенты», «Дисциплины» и «Успеваемость», которые содержат поля, указанные в предложении SELECT, и обеспечивает взаимосвязи таблиц через ключевые поля таблиц с помощью конструкции INNER JOIN . ON. Следует отметить, что операторы: SELECT и FROM всегда присутствуют в запросах на выборку.

Третье предложение содержит оператор WHERE и идентификатор «((Студенты.Фамилия)=[Введите фамилию])», определяющий условия отбора.
Четвертое предложение содержит оператор ORDER BY и идентификатор «Студенты.Фамилия». ORDER BY не является обязательным оператором и применяется для сортировки выходных данных.

На рисунке 1 представлен скриншот параметрического SQL запроса на выборку данных, сохраненный с именем «Запрос_с_параметрами».

В результате выполнения команды «Сохранить» в «Области переходов» появится объект — «Запросы: Запрос_с_параметрами».

После сохранения параметрического SQL запроса на выборку данных необходимо выполнить этот запрос, щелкая на пиктограмме «Выполнить» (рис.2).

Для выполнения запроса введем имя параметра отбора (Воронина) в диалоговое окно «Введите значение параметра» и щелкнем на кнопке «OK».

Результаты выполнения команды «Выполнить» представлены на рис. 3.

Область применения: Access 2013, Office 2013 Applies to: Access 2013, Office 2013

Используется для описания имен и типов данных параметров в запросе с параметрами. Declares the name and data type of each parameter in a parameter query.

Синтаксис Syntax

PARAMETERS name datatype [, name datatype [, . ]] PARAMETERS name datatype [, name datatype [, …]]

Объявление PARAMETERS включает следующие элементы: The PARAMETERS declaration has these parts:

Имя параметра. The name of the parameter. Присваивается свойству Name объекта Parameter и используется для его идентификации в коллекции Parameters. Assigned to the Name property of the Parameter object and used to identify this parameter in the Parameters collection. Параметр name можно вывести в диалоговом окне во время обработки запроса приложением. You can use name as a string that is displayed in a dialog box while your application runs the query. Текст, содержащий пробелы или знаки пунктуации, необходимо заключить в квадратные скобки ([ ]). Use brackets ([ ]) to enclose text that contains spaces or punctuation. Например, [Низкая цена] или [С какого месяца начинать составление отчета?] — допустимые значения аргумента name. For example, [Low price] and [Begin report with which month?] are valid name arguments.

Один из основных типов данных Microsoft Access SQL или их синонимов. One of the primary Microsoft Access SQL data types or their synonyms.

Примечания Remarks

Объявление PARAMETERS можно использовать для создания регулярно выполняемых запросов с параметрами. For queries that you run regularly, you can use a PARAMETERS declaration to create a parameter query. Запрос с параметрами позволяет автоматически вносить изменения в условия запроса. A parameter query can help automate the process of changing query criteria. При использовании запросов с параметрами программа должна запрашивать параметры при каждом выполнении запроса. With a parameter query, your code will need to provide the parameters each time the query is run.

Использование объявления PARAMETERS не является обязательным. Если оно используется, объявление PARAMETERS должно предшествовать всем остальным инструкциям, в том числе SELECT. The PARAMETERS declaration is optional but when included precedes any other statement, including SELECT.

Если параметров в объявлении несколько, их необходимо разделять запятыми. If the declaration includes more than one parameter, separate them with commas. В приведенном ниже примере использованы два параметра. The following example shows a URL that includes the two query parameters:

В предложении WHERE или HAVING нельзя использовать datatype, но можно использовать name. You can use name but not datatype in a WHERE or HAVING clause. В следующем примере ожидается ввод двух параметров, которые затем используются в качестве условий отбора записей в таблице Orders: The following example expects two parameters to be provided and then applies the criteria to records in the Orders table:

Пример Example

В этом примере пользователю нужно указать должность, которая затем используется в качестве условия запроса. This example requires the user to provide a job title and then uses that job title as the criteria for the query.

В этом примере выполняется вызов процедуры EnumFields, который вы можете найти в примере для инструкции SELECT. It calls the EnumFields procedure, which you can find in the SELECT statement example.

Здесь автору рекомендую создать на сервере хранимую процедуру, а в Access создать запрос к серверу, который послужит источником записей для отчёта и где SQL текст будет выглядит примерно таким: А в отчёте на событие «open» напишите VBA процедуру, которая будет «спрашивать» значения параметров у пользователя через inputbox (правда, не очень красиво выглядит) или же через специальную форму, созданная для этих целей. Затем это же процедура поменяет SQL текст запроса к серверу и все это надо будет проделать во время события «open», т.е. до того как реально откроется отчёт.

А вот в SQL представлениях невозможно передать параметры. Правда и там можно замутить так:Нужно создать отдельную таблицу (скажем Table1), где будут вносится параметры отчёта. В этой таблице необходимо присутствие также отдельного поля для логина пользователя. А в представлении в фильтре чтобы получить параметры от спец таблицы Table1 сначала Вам следует фильтровать саму таблицу Table1 по логину пользователя.

Именно так я и думал поступить, но вопрос как отфильтровать саму таблицу Table1 по логину юзера, если у меня Windows авторизация. (таблица юзеров есть, но она никакой связи не имеет с авторизацией сервера ), Переходить на авторизацию sql?

В зависимости от того, кто откроет таблицу в MS Access, каждый раз функция «User_Name()» в SQL Server будет возвращать различное значение, а значит данные будут отфильтрованы по разному.

Для меня загадка: как Вы собираетесь Table1 без VBA? Или у Вас в зависимости от пользователя параметры отчёта всегда строго зафиксированы? ИМХО когда открывается отчёт более целесообразно дать возможность пользователю изменения параметров. А значит всё равно придётся использовать VBA! А коли так, то я всё-таки рекомендую использовать первый вариант. Он ИМХО более «грамотней»!

. попробовал, функция User_Name() возвращает dbo. у меня виндовс авторизация, честно говоря, я думал что она возвратит имя юзера ActiveDirectory и это был бы приемлимый вариант

попробовал, функция User_Name() возвращает dbo. у меня виндовс авторизация, честно говоря, я думал что она возвратит имя юзера ActiveDirectory и это был бы приемлимый вариант. Но видимо, я прихожу к тому что знаний не хватает в администрировании SQL Server-a, видимо надо сделать sql авторизацию..

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий