- •Базы данных в Delphi 7. Самоучитель
- •Наборы данных
- •Общие свойства компонентов Table и Query
- •Состояния наборов данных
- •Режимы наборов данных
- •Работа с полями наборов данных
- •Набор данных Table
- •Набор данных Query
- •Источник данных
- •Листинг 3.1. Установка и разрыв связи с наборами данных
- •Что нового мы узнали?
Набор данных Query
Набор данных Query представлен в Delphi компонентом Query. Особенностью компонента Query является то, что его записи формируются после выполнения SQL-запроса.
В отличие от набора данных Table, компонент Query может содержать записи сразу нескольких таблиц.
Данный компонент удобно использовать при работе с удаленными базами данных.
Многие свойства компонента Query несут ту же нагрузку, что и соответствующие свойства компонента Table. В таблице 3.5 мы приведем лишь те из них, которые являются специфичными для компонента Query.
Таблица 3.5. Некоторые свойства компонента Query
Название |
Тип свойства |
Описание свойства |
Constrained |
Boolean |
Задает совместимость ограничений в предложении SELECT с операциями редактирования и вставки записей в таблицах Paradox и dBASE |
DataSource |
TDataSource |
Указывает имя компонента TDataSource, относящегося к глав- ному набору данных, из которого берется значение ключа; этому значению должны соответствовать записи набора данных |
ParamCheck |
Boolean |
Определяет, должно ли свойство Params автоматически обнов- ляться при изменении запроса в свойстве SQL во время выполнения |
Params |
TParams |
Содержит параметры запроса, находящегося в свойстве SQL |
RequestLive |
Boolean |
Позволяет попытаться возвратить результат запроса как «живой» набор данных, вместо таблицы «только для чтения» |
SQL |
TStrings |
Содержит текст SQL-запроса |
UniDirectional |
Boolean |
Определяет доступность двунаправленного курсора Borland Database Engine (BDE) |
Источник данных
Источник данных (data source) представляет собой промежуточный элемент, который применяется для связи набора данных с визуальными компонентами. Получается как бы цепочка: «набор данных — источник данных — визуальный компонент».
Для этой цели в Delphi служит компонент DataSource. Указанный компонент имеет пять основных свойств, которые отображаются в окне инспектора объектов. Эти свойства и их краткое описание представлены в табл. 3.6.
Таблица 3.6. Свойства компонента DataSource
Название |
Тип свойства |
Описание свойства |
AutoEdit |
Boolean |
Определяет, может ли набор данных автоматически перево- диться в режим модификации при попытке изменения данных пользователем. По умолчанию значение свойства — True, то есть такой перевод разрешен. В случае если вы не хотите допустить случайное изменение данных — установите значение этого свойства в False |
DataSet |
TDataSet |
Служит для указания набора данных, с которым связан источник данных. Отметим, что визуальные компоненты для связи с источником данных используют свое свойство DataSource |
Enabled |
Boolean |
Определяет, будут ли визуальные компоненты, связанные с этим источником данных, отображать данные из набора данных (true — да, false — нет) |
Name |
TComponentName |
Задает имя источника данных. По умолчанию источники данных получают имена DataSource1, DataSource2, ј, DataSourceN |
Tag |
LongInt |
Не имеет специального назначения. Применяется для хранения це- лого числа, связанного с компонентом, по усмотрению программиста |
ВНИМАНИЕ. Вне зависимости от значения свойства AutoEdit есть возможность программно изменять данные в наборе данных. Кроме того, независимо от значения этого свойства пользователь может перевести набор данных в режим модификации с помощью нажатия кнопок визуального компонента DBNavigator. Таким образом, значение свойства AutoEdit влияет лишь на попытку изменения данных пользователем.
При изменении данных в наборе данных происходит генерация события OnDataChange, которое имеет тип TDataChangeEvent. Этот тип описан в Delphi следующим образом:
type TDataChangeEvent = procedure (Sender: TObject; Field: TField) of object;
Параметр Field определяет, значение какого поля было изменено. Если данные были обновлены в нескольких полях, то параметр будет содержать пустое значение (nil).
ВНИМАНИЕ. Событие OnDataChange может произойти также и в случае, когда происходит переход на другую запись набора данных. Оно возникает, если значение текущего поля старой записи отличается от значения того же самого поля новой записи. Кроме того, это событие имеет место при первоначальном открытии набора данных.
Кроме события OnDataChange, при изменении значений полей текущей записи возникает событие OnUpdateData, которое имеет тип TNotifyEvent. Такое событие происходит перед записью данных в базу данных. Таким образом, его можно использовать, например, для подтверждения внесенных изменений или отказа от них.
Связь между набором данных и источником данных обычно устанавливается на этапе проектирования приложения с помощью инспектора объектов. Delphi допускает установку или разрыв этой связи и в процессе выполнения приложения. При установлении новой связи визуальные компоненты автоматически подключатся к новому набору данных и будут отображать его значения.
Приведем пример установки и разрыва связи (листинг 3.1).
