Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции. РАзработка БД в среде Delphi.doc
Скачиваний:
24
Добавлен:
12.06.2015
Размер:
315.39 Кб
Скачать

7.3. Запросы с параметрами

Для обеспечения большей гибкости запросов в тексте запроса могут указываться вместо конкретных значений переменные, которые получают конкретные значения при выполнении запроса. Такие переменные называются параметрами, а соответствующие запросы – запросами с параметрами. Перед переменной, обозначающей параметр в тексте запроса необходимо поставить знак «:», а перед открытием запроса – вызвать специальный метод ParamByName класса TQuery:

<имя объекта класса TQuery (имя запроса)>.ParamByName (<имя параметра>).Value:=<выражение>

Тип выражения должен соответствовать типу значения, который заменяет параметр в запросе. После выполнения метода ParamByName значение выражения заменяет в запросе параметр.

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

Структура такого запроса следующая:

SELECT b.name

FROM authers a, books b, country c

WHERE (b.id_aut=a.id) AND (a.id_country=c.id) AND (c.name=:param1) AND

(b.year_publ>=:param2)

ORDER BY b.name

Перед обращением к данному запросу необходимо задать значения двух параметров (типы данных: Country – String, Year- Short), а затем выполнить запрос:

Country:=InputBox(‘Наименование страны ’, ‘Введите наименование страны’,’’);

Year:=StrToInt(InputBox(‘Год’, ‘Введите год’,’’));

Query1.Close;

Query1.ParamByName('param1').Value:=Country;

Query1.ParamByName('param2').Value:=Year;

Query1.Open;

7.4. Запросы с операторами delete, insert, update

Запрос с оператором DELETE позволяет удалить из физической таблицы БД совокупность записей, удовлетворяющих заданным условиям.

Структура этого оператора в простом виде:

DELETE

FROM <имя таблицы БД>

WHERE <условие>

Например, для удаления из таблицы Books всех книг, изданных до 1917 года, необходимо выполнить следующий запрос:

DELETE

FROM books

WHERE books.year<1917

Запрос с оператором INSERT вставляет в таблицу запись с заданными значениями:

INSERT INTO <имя таблицы БД> (<список полей>)

VALUES (<список значений>)

INSERT INTO COUNTRY (ID, NAME)

VALUES (5, ‘Франция’)

Запрос с оператором UPDATE изменяет в таблице значения заданных полей для записей, удовлетворяющих заданным значениям.

UPDATE <имя таблицы БД>

SET <имя поля>=<выражение>, <имя поля>=<выражение>

WHERE <условие>

Для выполнения этих запросов из среды Delphi вместо метода Open вызывается метод ExecSQL.