4. Компоненты для работы с базами данных

4.1. Обзор не визуальных компонентов для работы с базами данных *

4.2. Обзор визуальных компонентов для работы с базами данных *

4.3. Иерархия классов важнейших невизуальных компонентов для представления данных и доступа к ним *

4.4. Функциональная иерархия компонентов Delphi для работы с базами данных *

4.5. Как связаны друг с другом компоненты для работы с базами данных *

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 соответствующего компонента типа "набор данных".