|
Поля и типы данных
- Каждая
таблица БД и, следовательно, каждый набор данных приложения имеет собственную
структуру, которая определяется совокупностью полей. Каждое поле набора данных
представляет собой объект, содержащий описание типа данных, которому должно соответствовать
значение, находящееся в записи на определенном месте.
- Объекты
полей инкапсулируют свойства и методы полей
различных типов данных. Они функционируют совместно с набором данных и очень тесно
связаны с ним.
- Статические и динамические
поля Динамические поля используются программой
в случае, если разработчик не создал для них объекты явным образом на этапе разработки.
Каждый не заданный явно объект поля автоматически создается при открытии набора
данных в соответствии со структурой связанной таблицы БД.
- Класс TField Как
уже говорилось выше, в большой иерархии классов для полей различных типов данных
класс TField является базовым, он инкапсулирует
свойства и методы абстрактного поля данных.
- Виды
полей Теперь рассмотрим классификацию полей
набора данных в зависимости от их функционального назначения. Самыми распространенными
полями являются поля данных, базирующиеся на реальных полях таблицы БД.
- Поля синхронного просмотра При
создании для исходного набора данных нового поля синхронного просмотра необходимо
использовать перечисленные ниже свойства.
- Вычисляемые
поля существенно облегчают разработку приложений
баз данных, т. к. позволяют получать новые данные на основе существующих, не изменяя
при этом структуру таблиц БД.
- Внутренние
вычисляемые поля Помимо простых вычисляемых
полей существуют внутренние вычисляемые поля (FieidKind
= fkinternaicaic).
- Агрегатные
поля предназначены для выполнения вычислительных
операций со значениями полей набора данных с использованием агрегатных функций
SQL.
-
Объектные поля Наряду с обычными типами данных
(строковым, целочисленным и т. д.), при работе с полями набора данных можно использовать
более сложные типы, представляющие собой совокупность более простых типов.
-
Типы данных В
среде разработки Delphi можно создавать приложения для работы с самыми разными
базами данных. Такая универсальность подразумевает необходимость применения средств,
которые бы обеспечили возможность работы со многими типами данных, используемыми
в этих базах данных.
- Ограничения
Контроль вводимых в поля набора данных в Delphi
возложен на объекты полей, а не на компоненты отображения данных. Именно в рамках
этого вопроса мы рассмотрим работу методов-обработчиков событий базового класса
TField.
Механизмы
управления данными
- Наряду
с описываемыми в предыдущих главах свойствами и методами, стандартный набор данных
Delphi инкапсулирует ряд дополнительных механизмов,
облегчающих управление записями и полями.
- Связанные
таблицы В рамках одного проекта таблицы БД можно
связывать отношениями "один- ко- многим" и "многие- ко- многим",
при этом отношения обязательно устанавливаются между индексированными полями двух
таблиц.
- Отношение "один-ко-многим"
Для установления отношения "один- ко- многим"
в наборе данных предназначены два свойства — Mastersource
и MasterFieids, которые задаются для подчиненной
таблицы.
- Отношение "многие-ко-многим"
отличается тем, что подчиненная таблица еще раз
связывается в качестве главной с другой подчиненной таблицей аналогичной последовательностью
действий, как и в отношении "один- ко- многим".
- Поиск
данных В наборе данных реализованы два способа
поиска записей по заданным значениям полей.
- Поиск
по индексам Для организации индексного поиска
к набору данных должен быть подключен индекс (свойства
IndexName ИЛИ IndexFieldNames).
- Поиск
в диапазоне Индексный поиск можно организовать
группой методов, подобно созданию диапазонов. Метод
setKey переводит набор данных в состояние dsSetKey,
затем должно следовать присваивание ключевым полям значений для поиска.
- Поиск
по произвольным полям Для поиска по произвольной
выборке полей можно использовать методы Locate
и Lookup.
- Фильтры
Наиболее эффективным способом отбора записей в набор
данных (особенно из больших таблиц) является создание и выполнение соответствующего
запроса SQL.
- Быстрый переход
к помеченным записям Закладки, как инструмент
работы с записями набора данных, позволяют осуществлять быстрое перемещение на
нужную запись.
- Диапазоны
В наборе данных, помимо фильтров, имеется еще одно
средство отбора записей. Группа методов позволяет на основе использования индексов
отбирать в набор данных только те записи, значения индексированных полей которых
(для текущего индекса) соответствуют диапазону заданных величин.
Компоненты
отображения данных
- До
этого момента мы рассмотрели аспекты создания приложений баз данных, касающиеся
организации доступа к данным и создания в приложениях наборов данных. Теперь более
подробно остановимся на вопросах отображения данных
в приложениях (интерфейс приложений).
- Классификация
компонентов отображения данных Все компоненты
отображения данных можно разделить на группы по нескольким критериям
-
Табличное представление данных
Этот компонент инкапсулирует двумерную
таблицу, в которой строки представляют собой записи, а столбцы — поля набора данных.
- Навигация
по набору данных Перемещение или навигация по
записям набора данных может осуществляться несколькими путями. Например, в компонентах
TDBGrid и TDBCtrlGrid,
которые отображают сразу несколько записей набора данных, можно использовать клавиши
вертикального перемещения курсора или вертикальную полосу прокрутки.
-
Представление отдельных полей Большинство
компонентов отображения данных предназначено для представления данных из отдельных
полей. Для этого все они имеют свойство DataField,
которое указывает на требуемое поле набора данных.
-
Компонент TDBText Этот
компонент представляет собой статический текст, который отображает текущее значение
некоторого поля связанного набора данных. При этом данные можно просматривать
в режиме "только для чтения".
- Компонент
TDBEdit Компонент представляет собой стандартный
однострочный текстовый редактор, в котором отображаются и изменяются данные из
поля связанного набора данных.
- Компонент
TDBCheckBox Компонент представляет собой почти
полный аналог обычного флажка (компонент TCheckBox)
и предназначен для отображения и редактирования любых данных, которые могут иметь
только два значения.
- Компонент
TDBRadioGroup Компонент представляет собой стандартную
группу переключателей, состояние которых зависит от значений поля связанного набора
данных. В поле можно передавать фиксированные значения, связанные с отдельными
переключателями в группе.
- Компонент
TDBListBox Компонент отображает текущее значение
связанного с ним поля набора данных и позволяет изменить его на любое фиксированное
из списка.
- Компонент TDBComboBox
Компонент отображает текущее значение связанного
с ним поля набора данных в строке редактирования, при этом значение поля должно
совпадать с одним из элементов разворачивающегося списка.
- Компонент
TDBMemo Компонент представляет собой обычное
поле редактирования, к которому подключается поле с типом данных
Memo или BLOB.
- Компонент
TDBImage Компонент предназначен для просмотра
изображений, хранящихся в базах данных в графическом формате.
-
Компонент TDBRichEdit Компонент
предоставляет возможности полноценного текстового редактора для просмотра и изменения
текстовых данных, хранящихся в связанном поле набора данных.
- Синхронный просмотр данных При
разработке приложений для работы с базами данных часто возникает необходимость
в связывании двух наборов данных по ключевому полю.
-
Механизм синхронного просмотра Непосредственным
предком компонентов синхронного просмотра данных является класс TDBLookupControl,
который инкапсулирует список значений для просмотра и сам механизм синхронного
просмотра.
- Компонент TDBLookupListBox
Компонент представляет собой список значений поля
синхронного просмотра для поля, заданного свойством DataField,
из набора данных DataSource.
-
Компонент TDBLookupComboBox Компонент
представляет собой комбинированный список значений поля синхронного просмотра
для поля, заданного свойством DataField,
из набора данных DataSource.
Технологии доступа к данным
- Процессор баз данных Borland Database
Engine
- Любое приложение баз данных имеет
в своем составе или использует сторонний механизм доступа к данным, который берет
на себя подавляющее большинство стандартных низкоуровневых операций работы
с базами данных
- Архитектура
и функции BDE BDE представляет собой набор
динамических библиотек, которые "умеют" передавать запросы на получение
или модификацию данных из приложения в нужную базу данных и возвращать результат
обработки.
- Псевдонимы баз данных
и настройка BDE Для успешного доступа к данным
приложение и BDE должны обладать информацией о местоположении файлов требуемой
базы данных. Задание маршрута входит в обязанности разработчика.
-
Интерфейс прикладного программирования BDE Как
уже говорилось выше, любое приложение Delphi, работающее с базами данных и написанное
с использованием стандартных компонентов доступа к данным, обращается к данным
и получает результат при помощи BDE.
- Соединение
с источником данных Все обращения из приложения
к таблицам одной базы данных осуществляются через одно соединение, на которое
замыкаются все компоненты доступа к данным, имеющие соответствующие значения свойства
DatabaseName (см. ниже).
- Компоненты
доступа к данным, используемые при разработке
приложений BDE, располагаются на странице BDE Палитры компонентов.
- Класс TBDEDataSet Этот
класс является потомком класса TDataSet,
его значение трудно переоценить: именно TBDEDataSet
обеспечивает работоспособность важнейших механизмов набора данных за счет обращения
к функциям BDE
- Класс TDBDalaSet
является непосредственным предком основных компонентов
доступа к данным ттаblе,
TQuery и TstoredProc.
- Компонент
ТТаblе инкапсулирует таблицу реляционной базы
данных, причем независимо от типа базы данных. Для доступа к данным компонент
использует функции BDE
- Компонент
TQuery
реализует все основные функции стандартного компонента запроса, описанные в гл.
12. Прямым предком компонента является класс TDBDataSet.
- Компонент TStoredProc
обеспечивает использование в приложениях BDE хранимых процедур. Прямым предком
компонента является класс TDBDataSet.
- Технология
dbExpress
- Одной
из проблем различных технологий доступа к данным,
используемым в приложениях Delphi, является трудность распространения готовых
приложений. Для BDE требуется отдельная установка, которая занимает порядка 15
Мбайт дискового пространства, а также специальная настройка псевдонимов
-
Драйверы доступа к данным Технология
dbExpress обеспечивает доступ к серверу баз данных при помощи драйвера, реализованного
как динамическая библиотека.
- Соединение
с сервером баз данных Для создания соединения
с сервером в рамках технологии dbExpress приложение должно использовать компонент
TSQLConnection.
- Управление
наборами данных Компонент
TSQLConnection позволяет выполнять некоторые операции с подключенными наборами
данных и следить за их состоянием.
- Транзакции
Подобно своим аналогам в BDE и ADO компонент
TSQLConnection поддерживает механизм транзакций и делает это сходным образом.
- Использование компонентов наборов
данных Набор компонентов dbExpress, инкапсулирующих
набор данных, вполне обычен и сравним с аналогичными компонентами BDE, ADO, InterBase
Express. Это компоненты TSQLDataSet,
TSQLTable, TSQLQuery, TSQLStoredProc.
- Компонент TSimpleDataSet
обеспечивает кэширование полученных данных
и сделанных изменений на стороне клиента и последующую передачу их на сервер для
фиксации.
- Способы редактирования
данных Несмотря на декларированные недостатки
технологии dbExpress — однонаправленные курсоры и невозможность редактирования
— существуют программные способы уменьшить масштаб проблемы или даже решить ее.
- Интерфейсы dbExpress Технология
dbExpress основана на использовании четырех базовых интерфейсов, методы которых
применяются во всех компонентах dbExpress.
- Интерфейс
ISQLDriver инкапсулирует всего три метода для
обслуживания драйвера dbExpress. Экземпляр интерфейса создается для соединения
и обеспечивает его связь с драйвером.
- Интерфейс
ISQLConnection
обеспечивает работу соединения. Он передает запросы серверу и возвращает результаты,
создавая экземпляры интерфейса iSQLCommand;
управляет транзакциями; поддерживает передачу метаданных при помощи интерфейса
ISQLMetaData.
- Интерфейс
ISQLCommand Так
как общим предком компонентов dbExpress объявлен класс TDataSet,
то задачей класса TCustomSQLDataSet является
не столько внесение новой
- Интерфейс
ISQL Cursor Компонент
TSQLDataSet является универсальным и позволяет выполнять запросы SQL (подобно
TSQLQuery), просматривать таблицы целиком
(подобно TSQLTable)или выполнять хранимые
процедуры (подобно TSQLStoredProc).
- Сервер
баз данных InterBase и компоненты InterBase Express
- На
странице InterBase Палитры компонентов содержатся компоненты доступа к
данным, адаптированные для работы с сервером InterBase
и объединенные названием InterBase Express. Компоненты из набора InterBase Express
предназначены для работы с сервером InterBase версии не ниже 5.5
- Механизм
доступа к данным InterBase Express Для компонентов
InterBase Express соединение с сервером БД осуществляет компонент TIBDatabase.
- Компонент TIBDatabase Так
как для доступа к базе данных компонентам InterBase
Express не требуется BDE, то для создания соединения используется всего
одно свойство DatabaseName.
-
Компонент TIBTransaction Компонент
TIBTransaction инкапсулирует средства управления
транзакцией при работе с сервером InterBase. Для этого он должен быть связан с
компонентом TiBDatabase при помощи своего
свойства
- Компоненты
доступа к данным Так как компоненты InterBase
Express используют для получения набора данных собственный механизм, то иерархия
классов-предков включает только обязательный для всех наборов данных
TDataSet класс TiBCustomDataSet, который,
собственно, и инкапсулирует механизм доступа InterBase Express
- Область дескрипторов XSQLDA Запрос
может иметь собственные параметры, которые должны содержаться в свойстве Params.
Однако, в отличие от обычного компонента запроса, в InterBase Express это свойство
представляет собой экземпляр класса TIBXSQLDA
-
Структура XSQLVAR Рассмотренная
выше область дескрипторов содержит возвращаемый результат запроса. Массив значений
каждого возвращаемого поля сохраняется в отдельной структуре XSQLVAR.
-
Компонент TIBTable
реализует все возможности стандартного компонента, инкапсулирующего таблицу
-
Компонент TIBQuery
выполняет все стандартные функции компонента запроса и наследует возможности класса
TiBCustomDataSet.
- Компонент
TIBStoredProc полностью соответствует стандартному
прототипу, описываемому в гл. 12.
- Компонент
TIBDataSet Компонент
TIBDataSet предназначен для представления в приложениях наборов данных
от сложных запросов
- Компонент
TIBSQL предназначен для быстрого выполнения
запросов SQL, поэтому не обеспечивает связи с компонентами представления данных
- Обработка событий Клиентское
приложение Delphi, работающее с сервером InterBase,
имеет возможность отслеживать события, происходящие в базе данных и вызываемые
другими процессами или приложениями.
- Информация
о состоянии базы данных В процессе отладки и
выполнения клиентских приложений для сервера InterBase разработчик может получать
подробную информацию об этих процессах.
- Компонент
TIBDatabaselnfo обладает большим числом свойств
и методов, содержащих разнообразные сведения о состоянии БД
- Компонент
TIBSQLMonitor Компонент
TIBSQLMonitor позволяет получать в клиентском приложении сообщения от сервера
о выполняемых им операциях.
- Использование ADO средствами
Delphi
- Наряду
с традиционными инструментами доступа к данным Borland Database Engine и ODBC
в приложениях Delphi можно применять технологию Microsoft
ActiveX Data Objects (ADO), которая основана на возможностях СОМ, а именно
интерфейсов OLE DB.
- Основы ADO Технология
Microsoft ActiveX Data Objects обеспечивает универсальный доступ к источникам
данных из приложений БД.
- Перечислители
Объекты- перечислители обеспечивают поиск любых
объектов ADO, которые имеют доступ к источникам данных. При этом другие перечислители
также видны в данном перечислителе.
- Объекты
соединения с источниками данных Внутренний
механизм ADO, обеспечивающий соединение с хранилищем данных, использует два типа
объектов. Это объекты-источники данных и объекты-сессии.
- Сессия
Из объекта-источника данных можно создавать объекты-сессии.
- Транзакции Управление
транзакциями в OLE DB реализовано на двух уровнях. Во-первых, всеми необходимыми
методами обладает объект сессии.
- Наборы
рядов Объект-набор рядов является основным объектом
ADO, обеспечивающим работу с данными. Он инкапсулирует совокупность рядов из источника
данных, механизмы навигации по рядам и поддержания рядов в актуальном состоянии.
- Команды Программные
средства ADO были бы неполными, если бы не имели возможности использовать для
работы с данными язык SQL. Операторы DML и DDL, ряд специальных операторов ADO
носят общее название текстовых команд.
-
Провайдеры ADO обеспечивают соединение приложения,
использующего данные через ADO, с источником данных (сервером SQL, локальной СУБД,
файловой системой и т. д.).
- Реализация
ADO в Delphi Механизм доступа к данным через
ADO и многочисленные объекты и интерфейсы реализованы в VCL Delphi в виде набора
компонентов, расположенных на странице ADO
- Компоненты
ADO Компонент
TADOConnection вобрал возможности перечислителя, источника данных и сессии
с возможностями обслуживания транзакций.
- Механизм
соединения с хранилищем данных ADO Компоненты
доступа к данным ADO могут использовать два варианта подключения к хранилищу данных.
Это стандартный метод ADO и стандартный метод Delphi.
-
Компонент TADOConnection
предназначен для управления соединением с объектами хранилища данных ADO. Он обеспечивает
доступ к хранилищу данных компонентам ADO, инкапсулирующим набор данных
|