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

 
на правах рекламы


Delphi. Компоненты Query, IBQuery. Реализация запросов


Вопрос 28. Delphi. Компоненты Query, IBQuery. Реализация запросов.

Компонент IBQuery не визуальный, его можно отобразить в DBGrid, а связующий компонент DataSource.

Свойства: DataBaseName – имя комп-та, связан с БД

SQL – тип string, здесь хран-ся текст запроса
Active – принимает значение true\false запрос (открыт/закрыт)
Методы: Close,Open
Открытие и закрытие IBQuery
Пример открытия IBQuery1.Activ:=true \ IBQuery1. Open
Пример закрытия IBQuery1.Activ:= false \ IBQuery1. Clos
Компонент для выполнения запросов. Если не требуется выполнять "редактирование" записей запроса, то IBQuery можно использовать вместо IBDataSet. Или, как замену IBDataSet можно использовать комбинацию IBQuery + IBUpdateSQL.


Дополнительно к свойствам IBDataSet (кроме отсутствующих Refresh/Insert/Update/DeleteSQL) имеет свойство Constraints (отсутствие данного свойства у IBDataSet скорее связано с какими то недоделками, т.к. компоненты IBTable, IBQuery и IBDataSet - унаследованы от IBCustomDataSet).
Для запросов, возвращающих набор записей, можно установить свойство Active в True или вызвать метод Open. Для остальных запросов, таких как insert/update/delete, execute или операторов DDL (create table, alter, drop...) нужно вызывать метод ExecQuery, т.к. эти запросы не возвращают записи, а возвращают только результат выполнения оператора SQL.
Помните, что IBQuery при выполнении запросов SELECT буферизирует записи точно так же, как и IBDataSet. для выполнения процедур, возвращающих данные (execute procedure) следует использовать IBSQL или IBStoredProc, т.к. вызов IBQuery.ExecSQL не заполняет Fields данными, полученными от процедуры.

Параметризованные запросы

Компоненты IBDataSet, IBQuery и IBSQL могут выполнять как статический, так и динамический SQL. Динамический SQL отличается от статического наличием параметров. Пример статического SQL:
select * from table
where field > 5
Если вместо цифры 5 предполагается использовать значение, полученное как ввод данных пользователем, то следует использовать параметризированный запрос (ParamCheck:=True):
select * from table
where field > :param
Двоеточие или символ '?' означают, что запрос предполагает задание параметра. Делается это следующим образом:
IBQuery.SQL.Clear; // очистить текст sql
IBQuery.SQL.Add('select * from table where field > :param'); // задать текст запроса
IBQuery.Prepare; // отправить запрос на сервер, проверить его корректность и т.п.
IBQuery.ParamByName('param').asInteger:=5; // задать значение параметра
IBQuery.Open; // или IBQuery.ExecSQL
Для статических запросов вызов Prepare необязателен - компонент сам его выполнит автоматически, если Prepare не был вызван.
примечание: после Prepare можно обратиться к свойству Plan, т.к. именно после Prepare сервер сообщает план выполнения запроса.
Prepare очень удобен при повторяющемся выполнении одного и того же запроса, с разными значениями параметра. При этом Prepare вызывается один раз, а установка параметров и вызов ExecQuery производится столько раз, сколько нужно. Чаще всего такой способ используется для запросов Insert и Update.
имена параметров поддерживаются только клиентской библиотекой. То есть, сервер понимает параметры только в виде символа '?'. Если компоненты умеют обрабатывать именованные параметры, то они перед отправкой запроса на сервер "вырезают" их, отправляя туда запрос вида
select * from table
where field > ?
Некоторые библиотеки компонент могут не поддерживать или некорректно обрабатывать запросы, в которых используется два или более параметров с одинаковым именем.

Комментарии:

Оставить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.