- •Работа с компонентом tQuery
- •Соединение компонента tQuery с базой данных
- •Соединение компонента tQuery и визуальных компонентов для работы с данными
- •Выполнение статических запросов
- •Методы открытия и закрытия компонента
- •Изменяемые tQuery
- •Выполнение динамических запросов Понятие динамического запроса
- •Формирование динамического запроса
- •Установка значений параметров динамического запроса во время выполнения
- •Методы Prepare a Unprepare
- •Указание значения null для параметров
- •Передача параметров через свойство DataSource
- •Формируемые запросы
- •Использование tQuery для получения агрегированных значений
Соединение компонента tQuery и визуальных компонентов для работы с данными
Соединение компонента TQuery с визуальными компонентами происходит через промежуточный компонент TDataSource. Для этого в компоненте TDataSource в свойстве DataSet необходимо указать имя компонента TQuery.
В визуальных компонентах (TDBGrid. TDBEdit и т.д.) в свойстве DataSource указывается имя компонента TDataSource и, если необходимо, в свойстве DataField выбирается имя интересующего поля.
Выполнение статических запросов
Для формирования статического запроса необходимо:
1. Выбрать для существующего компонента TQuery в инспекторе объектов свойство SQL и нажать кнопку в правой части строки;
2. В появившемся окне текстового редактора набрать текст SQL запроса
3. Установить свойство Active компонента TQuery в True, если НД должен быть открыт в момент начала работы приложения или оставить свойство Active в состоянии False, если открытие НД будет производиться в программе в некоторый момент работы приложения.
Условия выборки записей, единожды реализованные по статическому запросу, изменить нельзя, поскольку текст SQL-оператора данного запроса в программе не изменяется.
Формирование текста SQL-оператора SBLECT может осуществляться не вручную, а при помощи встроенного в Delphi средства Visual SQL Builder, действующего по принципу QBE (Query By Example, запрос по образцу). Для его запуска нужно сделать компонент TQuery текущим, нажать правую кнопку мыши и выбрать режим SQL Builder.
Visual SQL Builder запрашивает имена таблиц, полей и позволяет визуально сконструировать запрос.
Visual Query Builder обычно используется для создания черновых вариантов оператора SELECT. Впоследствии текст запроса трансформируется разработчиком к нужному виду.
Пример формирования статического запроса с помощью компонента Query
Методы открытия и закрытия компонента
Компонент TQuery может возвращать НД (если компонент использует оператор SELECT, то есть осуществляет выборку из одной или более таблиц БД) и выполнять действие над одной или более таблицей БД (SQL-операторы INSERT, UPDATE, DELETE).
В случае использования оператора SELECT после открытия компонента TQuery возвращается НД, в котором указатель текущей записи всегда установлен на первую запись (если она имеется). Такой компонент TQuery следует открывать:
– установкой свойства Active в значение True, или
– выполнением метода procedure Open;
Query1.Open;
В случае использования операторов INSERT, UPDATE. DELETE набор данных не возвращается. Такой компонент TQuery следует открывать выполняя метод procedure ExecSQL;
Query1.ExecSQL;
Закрытие компонента TQuery осуществляется методом procedure Close; или установкой в False свойства Active, например:
Query1.Close;
Изменяемые tQuery
Записи НД. возвращаемые компонентом TQuery могут изменяться, тому, как это происходит в компоненте ТТаble. Записи можно редактировать в компоненте TDBGrid, связанном c TQuery (метод автоматического перевода в состояния dslnsert, dsEdit, автоматического выполнения методов Insert, Delete, Post и Canсel). Также может применяться метод программного формирования значения полей записи, ввода таких значений с использованием компонента TDBEdit, TDBCheckBox и других. В .этом случае методы Insert, Delete, Post и Cancel вызываются в программе явно.
Возможность изменения НД, возвращаемого после выполнения SELECT, определяется свойством property CanModify:Boolean;
Значение этого свойства устанавливается: автоматически, исходя из определенных факторов. Если в процессе выполнения свойство CanModify установлено в True, набор данных доступен для изменения. При значении False записи НД не могут быть добавлены, изменены или удалены.
Свойство CanMedify всегда устанавливается в False, если в False установлено свойство RequesiLive компонента TQuery: property RequestLive: Boolean;
Значение данного свойства может быть установлено как во время проектирования, так и во время разработки приложения. По умолчанию всегда устанавливается False (НД доступен только для чтения). Однако установка данного свойства в значение True (НД может быть изменен) вовсе не означает, что НД действительно будет позволено изменяться и что свойство CanModify установлено в True. Эго произойдет только в том случае, если синтаксис оператора SELECT при выполнении запроса будет признай "верным".
Синтаксис оператора SELECT будет признан "неверным", если:
– НД формируется более чем из одной ТБД:
– присутствует предложение принудительной сортировки результирующего набора данных ORDER BY;
– значения хотя бы одного столбца результирующего НД сформировано с использованием агрегатных функций (SUM, COUNT. AVG, MIN, MAX);
– при доступе к СУБД Sybase в таблице отсутствует уникальный индекс.
В этом случае, если свойство RequestLive установлено в True, а синтаксис оператора SELECT признай "неверным", то возвращается НД, доступный только для чтения – при доступе к таблицам локальных СУБД (Paradox, dBase).
Если изменения, внесенные в НД методами Post, Delete, не отображаются в НД, его содержимое можно обновить методом
procedure Refresh;
Однако в этом случае оператор SELECT, должен быть выполнен для таблицы локальной СУБД и эта таблица должна иметь уникальный индекс.
Предотвратить ввод записей, не удовлетворяющих условиям, перечисленным в предложении WHERE оператора SELECT, можно путем установки в True значения свойства
property Constrained: Boolean;
Например, для НД, полученного по запросу
Select * fron rashod where kolvo>1000
при Constrained, установленном в True, будут блокироваться попытки запоминания записей со значением поля kolvo, меньшим 1000.
В том случае, если НД доступен только для чтения, его записи могут быть изменены при помощи SQL-операторов INSERT, UPDATE, DELETE. При этом изменения в НД не отображаются. Для отображения изменений НД следует переоткрыть, выполнив метод Close и повторно Open.