Общие компоненты
Компонент отображения данных, например, DBGrid <- DataSource <- Table <- База Данных
<- Query < - >
Основные компоненты, используемые при программировании приложений БД:
TDatabase – представляет БД как единое целое (совокупность таблиц);
TTable – предоставляет доступ к таблице из БД (проверяет существование, получает структуру таблицы (поля и их атрибуты), открывает таблицу);
TQuery – позволяет выполнять произвольные запросы (выполняет запрос из свойства TQuery.SQL).
DataSource – связывает компонент Table, соединённый с реальной таблицей БД, и визуальные компоненты для отображения интерфейса (DBGrid, DBNavigator)
Визуальные компоненты для отображения и редактирования данных (DBGrid, DBText, DBEdit, DBMemo, DBImage, ...)
Основные компоненты, используемые в технологии BDE:
Table – обеспечивает взаимодействие с таблицей БД;
Свойство DataBaseName – указывает путь к БД
Свойство TableName – указывает имя таблицы в БД
Свойство Active – открывает набор данных (true)
DataSource – связывает компонент Table, соединённый с реальной таблицей БД, и визуальные компоненты для отображения интерфейса (DBGrid, DBNavigator)
Свойство DataSet – указывает на Table
DBGrid – отображает содержимое таблицы БД в виде сетки, в которой столбцы соответствуют полям таблицы, а строки – записям.
DBNavigator – позволяет перемещаться по таблице, редактировать, вставлять и удалять записи. DBGrid и DBNavigator связываются с источником данных – компонентом DataSource – через свойство DataSource.
Для создания интерфейса может быть использован мастер Database Form Wizard.
Технологии BDE
BDE (Borland Database Engine) - Процессор баз данных фирмы Borland. Основная технология для доступа к базам данных компании Borland (и ранних версий С++ Builder). Основан на стандарте IDAPI (Integrated Database API).
В BDE для каждого формата определяется свой драйвер, отвечающий за работу с этим форматом.
Приложение
п
п
IDAPI32.DLL
Local SQL
QBE
iddbas32.dll – драйвер dBase;
idpdx32.dll – драйвер Paradox;
sqlmss32.dll – драйвер SQL Link для Microsoft SQL Server;
... (и т.д.)
При централизованной архитектуре (локальная БД) драйвер формата сам работает с файлами БД.
При рассмотренной (клиент-серверной) архитектуре вызовы транслируются с помощью SQL Link в вызовы функции API клиентской части конкретного SQL-сервера.
При работе с ODBC драйвер (IDFPTOR) аналогично SQL Link транслирует вызовы BDE в вызовы ODBC.
При переключении программы на другую СУБД, в проекте достаточно изменить единственное свойство – тип драйвера доступа.
Псевдоним (alias) – содержит всю информацию, необходимую для обеспечения доступа к базе данных. Задаётся один раз – при создании псевдонима.
Для создания, просмотра и редактирования псевдонимов в Borland C++ Builder могут использоваться:
Database Desktop;
BDE Administrator;
Database Explorer.
Базовое понятие BDE – набор данных:
Набор данных – набор записей фиксированной структуры, составленных из одинакового набора полей.
Физически – копия реальной таблицы БД или результат работы SQL-запроса.
Логически набор данных реализуется абстрактным классом TDataSet.
Для работы с БД используются его потомки: TTable, TQuery, TStoredProc.
Иерархия:
TDataSet \
TBDEDataSet | абстрактные классы
TDBDataSet /
TTable TQuery TStoredProc - не абстрактные
Основные свойства и методы, наследуемые от TDataSet:
bool Active – открывает или закрывает набор данных
Аналогично этому свойству действуют методы:
void Open (void); - открывает набор данных
void Close (void); - закрывает набор данных
Способы доступа к данным подразделяются на:
Навигационные – каждая запись таблицы обрабатывается отдельно (Table или Query)
Реляционный (SQL-ориентированный) – сразу обрабатывается группа записей (Query)
Навигационный способ доступа основан на концепции указателя набора данных.
Указатель набора данных – системный элемент, который отслеживает местонахождение текущей записи таблицы базы данных.
Основные методы и свойства, наследуемые от TDataSet:
void Next (void); - переход к следующей записи
void Prior (void); - переход к предыдущей записи
void First (void); - переход к первой записи
void Last (void); - переход к последней записи
int MoveBy (int Distance); - переход на Distance записей относительно текущей записи; возвращает количество записей на сколько был совершен переход.
Пример.
Table1 → MoveBy (42); - переход на 42 записи вперёд
Table1 → MoveBy (-5); - переход на 5 записей назад
bool Eof; - (End-of-file) достигнута последняя запись
bool Bof; - (Beginning-of-file) достигнуто начало таблицы
int RecNo; - задаёт номер текущей записи
int RecordCount; - количество записей в наборе данных
Для ускорения работы с набором данных.
void DisableControls (void); - отключает отображение данных в связанных с набором данных визуальных компонентах
void EnableControls (void); - включает отображение
bool IsEmpty (void); - указывает на то, что набор данных не содержит данных
Работа с полями текущей записи:
TFields Fields; - совокупность полей текущего набора записей;
TFieldDefs FieldDefs; - параметры полей текущего набора записей;
int FieldCount; - общее количество полей записи текущего набора данных;
System∷Variant FieldValues [AnsiString FieldName] – предоставляет доступ к полям текущего набора данных по их именам;
Пример.
Animals → FieldValues [“Name”] = Edit1 → Text;
Работа с полями текущей записи:
TField FieldByName (const AnsiString FieldName); - доступ к полю по его имени;
Пример.
Animals → Fields → Fields[0] → AsString = “jaguar”;
Animals → FindField (“Name”) → AsString = “jaguar”;
void GetFieldNames (Classes ∷ TStrings* List); - возвращает список имён полей набора данных;
TDataSetState State; - возвращает текущее состояние набора данных;
enum TDataSetState {
dsInactive, - набор данных закрыт;
dsBrowse, - данные можно просматривать, но не редактировать;
dsEdit, dsInsert, - активная запись редактируется / вставляется;
dsSetKey, dsCalcField, - поиск или вычисление записи;
dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockread, dsInternalCalc, - внутренние состояния набора данных;
dsOpening – набор данных открывается;
};
Редактирование:
bool CanModify; - возможно ли редактирование;
void Edit (void); - переводит набор данных в режим редактирования;
void Post (void); - сохраняет сделанные изменения (вызывается автоматически при переходе к следующей записи)
void Cancel (void); - отменяет все изменения, сделанные после последнего вызова Post();
void Append (void); - добавляет новую пустую запись в конец набора данных;
void Insert (void); - добавляет новую пустую запись на место текущей;
void Delete (void); - удаляет текущую запись;
void ClearFields (void); - очищает содержимое всех полей текущей записи;
bool Modified; - редактировалась ли текущая запись;
void Refresh (void); - обновляет содержимое набора данных (не для всех потомков TDataSet, с SQL-запросом работать не будет);
Навигационный подход чаще всего реализуется с помощью компонента TTable, который предоставляет доступ к определённой таблице базы данных.
Для доступа к таблице используются свойства:
AnsiString DatabaseName; - задаёт имя базы данных, доступ к таблицам которой требуется;
AnsiString TableName; - имя таблицы в БД, которая будет связана с этим компонентом
Реляционный подход чаще всего реализуется при помощи компонента TQuery. TQuery представляет собой набор данных, полученный при выполнении одного SQL-запроса DDL или DML.
Для компонента TQuery установка свойства Active в true приводит к выполнению SQL-запроса. К тому же приводит вызов методов Open() и ExecSQL().
Текст запроса задаётся свойством TStrings SQL;
Метод ExecSQL() используется в том случае, если не требуется возвращать набор данных (удаление, изменение).
Пример.
Query1 → Active = false; // Query1→Close();
Query1 → DatabaseName = “c:\\ProgramFiles\\CommonFiles\\BorlandShared\\Data”;
Query1 → SQL → Clear();
Query1 → SQL → Add ( “SELECT * FROM animals.db” );
Query1 → Active = true; // Query1 → Open();
Технология ODBC
ODBC(Open Database Connectivity) – технология доступа к данным, разработанная фирмой Microsoft.
ODBC 1.0 – август 1993.
По функциональности ODBC – подмножества BDE. Но открытость стандарта и наличие ODBC SDK, позволяющего любой фирме написать свой драйвер потеснили BDE.
Технология dbExpress
dbExpress – набор легковесных драйверов, обеспечивающих доступ к серверам SQL на основе единого интерфейса.
меньший размер кодов, чем при использовании BDE;
ориентирована на SQL-запросы;
допускает легкую переносимость между Windows и Linux;
не требует установки дополнительного ПО для работы приложения БД – только копирование DLL с драйвером.