Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OAP_Vopros_8_Rabota_s_komponentom_TQuery.doc
Скачиваний:
6
Добавлен:
30.04.2015
Размер:
175.62 Кб
Скачать

Соединение компонента 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.