4. Компоненты для работы с базами данных
4.1. Обзор не визуальных компонентов для работы с базами данных
TSession |
Содержит информацию о текущем сеансе работы с БД; позволяет определить список доступных и активных БД, открывать, отыскивать и закрывать БД, управлять параметрами. |
TDataBase |
Активно используется при работе в архитектуре "клиент-сервер". Позволяет осуществлять соединение с удаленной БД и управлять параметрами соединения, получать информацию о БД, получать информацию об открытых НД и о доступных таблицах БД. |
TDataSource |
Служит промежуточным звеном в цепочке "Набор данных - TDataSource - Визуальные компоненты для работы с данными". Позволяет устанавливать некоторые параметры НД, устанавливать состояние НД, отслеживать изменения в НД. |
TDataSet TBDEDataSet TDBDataSet |
Явно в приложениях не используются, однако ценны тем, что являются предками активно используемых в приложениях компонентов типа "набор данных" ( TTable, TQuery и TstoredProc). Определяют ряд свойств и методов, наследуемых и частично переопределяемых компонентами TTable, TQuery и TStoredProc. TDataSet определяет свойства и методы для работы с БД, независимые от машины баз данных. Многие из них являются абстрактными или виртуальными. TBDEDataSet, определяет ряд свойств и методов, зависящих от используемой машины баз данных. TDBDataSet дополнительно вводит ряд свойств. |
TTable |
Реализует набор данных, источником данных для которого является одна таблица БД. Содержит множество методов, свойств и событий, посредством которых можно выполнять над НД богатый спектр операций. Многие из них расширяют множество свойств, методов и событий, определенных в предках Ttable - компонентах TDataSet и TBDEDataSet. |
TQuery |
Реализует набор данных, источником данных для которого являются одна или несколько таблиц БД. Структура записи НД, состав НД определяются SQL-запросом (оператор SELECT). Кроме выдачи НД, используется для групповых операций обновления, добавления или удаления в ТБД, а также может выполнять любые действия, Предусмотренные реализацией языка SQL для тон СУБД, с которой работает TQuery. Для типов данных так называемых "персональных" СУБД позволяет реализовывать "локальный" вариант SQL. При помощи TQuery можно реализовывать как статические, так и динамические (изменяющиеся в процессе выполнения приложения) SQL-запросы. |
TStoredProc |
Используется в архитектуре "клиент-сервер" для доступа к хранимым процедурам, расположенным на удаленной БД. Хранимые процедуры кодируются на особом процедурном языке, хранят, как правило, часто употребляемые запросы к БД и могут разделяться между различными приложениями. Компонент TStoredProc наряду с компонентами TTable и TQuery является набором данных, поскольку может возвращать множество записей из одной или нескольких физических таблиц БД. |
TIndexDefs |
Позволяет получить информацию об индексах, определенных для данной ТБД, и об индексных полях для текущего индекса; реализует поиск индекса по группе индексных полей. |
TFieldDefs |
Позволяет получить информацию о полях, определенных в составе записей данной ТБД. |
TField |
Реализует поле НД. Помимо полей, физически определенных в ТБД и включенных в состав конкретного НД, компонент TField создается для каждого вычисляемого поля или поля, возвращающего значение из другого НД (lookup), а также для результатов вычисления выражений и агрегатных функций в SQL-запросах. Предоставляет набор свойств, методов и событий, посредством которых можно управлять поведением поля. Собственно TField есть родительский класс для дочерних компонентов, реализующих поля конкретных типов (TStringField, TIntegerField, и т.д.). Tfield определяет свойства, методы и события, которые по праву наследования доступны во всех дочерних классах полей. |
TBatchMove |
Позволяет осуществлять копирование и перенесение записей из одних НД в другие. |
TCUentDataSet |
Компонент типа "набор данных" для приложения тонкого клиента. Используется в многозвенной архитектуре доступа к БД. |
TRemoteServer |
Брокер данных, расположенный в приложении тонкого клиента (многозвенная архитектура). Используется для соединения приложения тонкого клиента с сервером приложений. |
TProvider |
Брокер данных, расположенный на сервере приложений (многозвенная архитектура). Используется для соединения сервера приложения с приложением тонкого клиента. |
TDecisionCube |
Осуществляет многомерное представление данных для систем принятия решений. |
TDecisionQuery |
Вариант TQuery для работы с TDecisionCube при использовании систем принятия решений. |
TDecisionSource |
Разновидность компонента TdataSource для работы с многомерными данными в системах принятия решений. |
4.2. Обзор визуальных компонентов для работы с базами данных
TDBText |
Показывает "только для чтения" значение поля текущей записи НД. |
TDBEdit |
Обеспечивает просмотр и изменение значения поля текущей записи НД. Поля - любого типа, кроме полей комментариев и BLOB. |
TDBCheckBox |
Обеспечивает просмотр и изменение значения поля типа Boolean текущей записи НД. |
TDBRadioGroup |
Обеспечивает возможность выбора значения для поля, которое может содержать фиксированное число вариантов значений. Значения показываются в виде радиокнопок. |
TDBMemo |
Позволяет просматривать и корректировать значение мемо-поля (поля комментария) в режиме текстового редактора. |
TDBRichEdit |
Имеет то же назначение, что и TDBMemo, но позволяет работать с текстом формата RTF, включающим разные шрифты, графику и пр. |
TDBImage |
Позволяет просматривать графические поля, заносить в них содержимое. |
TDBListBox |
Применяется, когда нужно выбрать значение поля из предустановленного списка значений; значения показываются в виде строк в списке фиксированного размера. Содержимое списка определяется свойством Items. |
TDBComboBox |
Применяется для тех же целей, что и TDBListBox, но список "выпадающий". |
TDBLookupListBox |
Применяется для выбора значения поля из списка значений, который формируется из определенного столбца другого набора данных. Высота списка фиксирована |
TDBLookupCombo Box |
Применяется для тех же целей, что и TDBLookupListBox, но список - комбинированного вида ("выпадающий"). |
TDBGrid |
Показывает содержимое полей НД в "табличном" виде, когда записям соответствуют строки, полям - столбцы |
TDBCtrlGrid |
"Продвинутая" версия компонента TDBGrid, позволяющая, в отличие от последнего, показывать содержимое одной записи НД в нескольких строках |
TColumn |
Столбец компонента TDBGrid, обладающий свойствами и методами, которые позволяют управлять его поведением |
TQuickRep |
Компонент TQuickRep и связанная с ним группа компонентов позволяет разрабатывать формы отчетов. |
TDBNavigator |
Позволяет осуществлять навигацию по записям НД, переводить НД в состояния вставки, изменения, добавления записи, запоминать изменения |
TDBChart |
Реализует графическое представление данных, хранящихся в компонентах типа "набор данных". |
TDecisionGraph |
Представляет в графическом виде многомерные данные при работе с системами принятия решений. |
TDecisionPivot |
Реализует двумерную проекцию многомерных данных при работе с системами принятия решений. |
TDecisionGrid |
Разновидность компонента TDBGrid для табличного представления многомерных данных при работе с системами принятия решений. |
4.3. Иерархия классов важнейших невизуальных компонентов для представления данных и доступа к ним
TComponent
TSession
TDatabase
TDataSource
TDataSet
TBDEDataSet
TDBDataSet
TTable
TQuery
TStoredProc
TClientDataSet
TField
TBIobField
TGraphicField
TMemoField
TbooleanField
TBooleanField
TBmaryField
TBytesField
TVarBytesField
TDateTimeField
TDateField
TTimeField
TNumericField
TBCDField
TFloatField
TCurrencyField
TIntegerField
TAutoIncField
TSmallIntField
TWordField
TStringField
Приведенная здесь иерархия показывает, что свойства, методы и события, объявленные у компонентов-предков, по праву наследования доступны и у их компонентов-потомков.
Например, в одном из последующих разделов достаточно подробно описывается родительский компонент
TField (поле набора данных), его методы, свойства и события; однако дочерние компоненты TField описываются далеко не столь подробно. Причина этому в том, что все события, методы и свойства, присущие группе компонентов, достаточно описать один раз.Другим примером может служить TDataSet: многие его свойства, методы и события по праву наследования доступны и у его потомков - компонентов
TTable и TQuery.О наследовании компонентами-потомками свойств, методов и событий своих родителей следует помнить постоянно.
4.4. Функциональная иерархия компонентов
Delphi для работы с базами данныхЕсли иерархия классов компонентов, приведенная в предыдущем подразделе, призвана показать, кто является чьим потомком и, следовательно, кто может использовать свойства, методы и события родителя, то приводимая на рис.4.1 функциональная иерархия не зависит от "классовой" структуры.
В функциональной иерархии показывается, какие компоненты являются свойствами других компонентов и, соответственно, к каким компонентам, связанным с текущим, мы можем получить доступ
Приведенная схема призвана показать следующее.Используя неявно создаваемый или явно созданный компонент
TSession (подробности в соответствующем разделе), можно определить, какие базы данных в текущий момент активны для приложения (свойство Databases).Используя компонент
TDatabase, можно определить, какие наборы данных используются приложением (компонент TDataSet).Используя компонент TDataSet, можно:
• для НД, связанных с компонентом
TTable:• узнать, какие индексы определены для таблицы БД, ассоциированной с этим набором данных (компонент
TIndexDef);• для каждого индекса получить информацию об индексных полях и перейти к использованию свойств и методов отдельного индексного поля;
• получить информацию обо всех полях, определенных в структуре ТБД, ассоциированной с данным компонентом
TTable (свойство FieldDefs.Items);• для всех наборов данных (компоненты
TTable, TQuery, TStoredProc ) -получить информацию обо всех активных полях набора данных и получить доступ к свойствам и методам каждого активного поля. Таким образом, информация о структурах данных различных уровней носит в приложении Delphi сквозной характер. Взяв за стартовую точку текущую сессию (сеанс) приложения по работе с БД, можно "спуститься" к отдельному полю какого-либо набора данных.Более подробно о работе каждого компонента и о связи его с другими -визуальными и невизуальными компонентами для работы с данными - будет рассказано в соответствующих разделах.
4.5. Как связаны друг с другом компоненты для работы с базами данных
Визуальные и невизуальные компоненты связываются друг с другом при помощи свойств. Значения этих свойств обычно устанавливаются на этапе разработки приложения, но могут устанавливаться и во время выполнения приложения. На рис. 4.2 показано, через какие свойства различные компоненты связаны друг с другом.
Первым уровнем являются псевдонимы
BDE, устанавливаемые при помощи ВDE Administrator. На псевдоним ссылается компонент типа "набор данных" (показанные на рисунке компоненты TTable и Tquery, не показанный компонент TStoredProc, применяемый преимущественно в архитектуре "клиент-сервер"). Имя псевдонима БД записывается как значение свойства DataBaseName этих компонентов. При работе в архитектуре "клиент-сервер" псевдоним БД часто записывается в свойство AliasName компонента TDatabase, отвечающего за связь с удаленной БД. База данных получает новый псевдоним (свойство DataBaseName компонента TDatabase). В этом случае компоненты типа "набор данных" в свойстве DataBaseName хранят значение из свойства DataBaseName компонента TDatabase.Компонент
TTable работает с записями одной физической таблицы БД. Поэтому свойство TableName этого компонента хранит имя этой таблицы БД.Компонент
TQuery в общем случае возвращает набор данных, записи которого получены в результате выполнения запроса к одной или нескольким таблицам БД. Имена таблиц и условия выборки из них записей устанавливаются в запросе (SQL-оператор SELECT), который хранится в свойстве SQL компонента TQuery.Имя любого компонента типа "набор данных" хранится в его свойстве
Name. Свойство Active указывает, активен ли (открыт, готов для доступа к данным) соответствующий набор данных (значение True) или не активен (значение False). Открытие НД производится на этапе разработки приложения и во время выполнения установкой свойства Active в значение True, а также во время выполнения - при помощи метода Open этого набора данных.Для связи визуальных и невизуальных компонентов для работы с данными используется компонент "промежуточного уровня",
TDataSource (источник данных). Его свойство DataSet содержит имя соответствующего компонента типа "набор данных".Визуальные компоненты разделяются на работающие с множеством записей набора данных (например,
TDBGrid) и с отдельным полем (TDBEdit и другие). Соответственно, компоненты, работающие с множеством записей, ссылаются в своем свойстве DataSource только на имя компонента TDataSource;компоненты, работающие с конкретным полем, кроме этого ссылаются на имя поля НД (свойство
FieldName). Список доступных полей набора данных хранится в свойстве Fields соответствующего компонента типа "набор данных".