- •4.1. Основные понятия
- •4.2. Создание псевдонима базы данных
- •4.3. Создание таблиц базы данных
- •4.3.1. Объявление полей
- •4.3.2. Изменение языкового драйвера
- •4.3.3. Определение индексов
- •4.3.4. Определение ссылочной целостности между таблицами
- •4.3.5. Изменение структуры таблицы
- •4.4. Открытие и сохранение таблицы
- •4.5. Дополнительные утилиты
- •5.1. Взаимодействие классов, обеспечивающих доступ к таблицам
- •5.2. Классы tField и tTable: основное назначение и свойства
- •5.2.1. Класс tField: основное назначение и свойства
- •5.2.2. Класс tТable: основное назначение
- •5.2.3. Основные свойства класса tTable
- •5.2.4. Основные методы класса tTable
- •1) Доступ к таблице бд
- •2) Перемещение по записям таблицы
- •3) Режим редактирования таблицы
- •4) Доступ к значениям полей по имени
- •5) Добавление, удаление записей
- •6.1. Индексирование таблиц
- •6.2. Поиск записей
- •6.3. Поля компонента Table
- •6.4. Вычисляемые и связанные поля
- •Лекция 7. Запросы.
- •7.1. Запросы
- •7.3. Запросы с параметрами
- •Перед обращением к данному запросу необходимо задать значения двух параметров (типы данных: Country – String, Year- Short), а затем выполнить запрос:
- •7.4. Запросы с операторами delete, insert, update
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.