Delphi - база знаний

         

Kylix Tutorial. Часть 2. Работа с базами данных через dbExpress.


Kylix Tutorial. Часть 2. Работа с базами данных через dbExpress.





Фирма Borland в Kylix и Delphi 6 реализовала новый движок для работы с базой данных dbExpress. Данный движок предназначен для работы с серверными БД. На сегодняшний день поддерживаются MySQL, Oracle, Interbase, DB2. К сожалению, на момент выпуска Kylix он работал не со всеми версиями MySQL. В частности, он не заработал с MySQL 3.23.22-beta. За неимением Oracle и DB2 я пользовался Interbase 6, находившемся на втором диске дистрибутива.

Архитектура доступа к данным
В самом виде приложение для работы с базами данных может быть представлено в следующем виде:


Ничего принципиально нового здесь нет, по сравнению с Delphi. Но это только на первый взгляд. В dbExpress датасеты делятся на два вида:
1. Клиентский датасет (client dataset)




2. Однонаправленные датасеты (unidirectional dataset)
Клиентский датасет хранит выбранные записи в памяти. Это позволяет осуществлять навигацию в любом направлении, фильтровать записи, кешировать изменения итд. Именно данный вид используется для отображения данных пользователю.
Однонаправленные запросы не кешируют данные. Передвигаться по ним можно только в направлении указанном в конструкции ORDER BY SQL запроса, данные не могут быть изменены. Однако они предоставляют быстрый доступ к большим массивам записей.

Компоненты закладки dbExpress
Посмотрим, что приготовила нам фирма Borland по части компонентов на закладке dbExpress
СвойстваОписание SQLConnection Компонент для организации связи с сервером базы данных. Аналог Database в BDE. Позволяет управлять параметрами соединения с сервером БД, такие как путь к базе данных, имя и пароль пользователя итд. Connected:booleanПризнак установления соединения с БД. True - соединение активно. ConnectionName: stringИмя конфигурации, содержащей параметры соединения. Аналог AliasName в TDatabase для BDE DriverName: stringИмя драйвера для соединения. (DB2, Interbase,Oracle, MySQL). Устанавливается автоматически при установке св-ва ConnectionName KeepConnection: booleanПоддерживать соединение с сервером БД, если в приложении нет активизированных датасетов. LibraryName: stringИмя библиотеки, содержащей драйвер для связи с сервером БД LoadParamsOnConnect: booleanЗагружать ли параметры соединения, ассоциированные с именем соединения, перед установкой соединения в run time. Полезно в случае когда параметры соединения могут быть изменены вне приложения или меняются в design time LoginPrompt: BooleanЗапрашивать логин и пароль при соединении Name: TComponentName Имя компонента Params: TStringsПараметры соединения TableScope: TTableScopesПараметры видимости таблиц
TsSynonym - видеть синонимы
TsSysTable - видеть системные таблицы
TsTable - видеть таблицы
TsView - видеть просмотры VendorLib: stringИмя библиотеки с клиентской частью БД SQLDataSet Однонаправленный датасет общего назначения. Active: booleanАктивность датасета CommandText: stringТекст команды (запроса) на получение или манипуляции с данными CommandType: TSQLCommandTypeТип датасета
CtQuery - SQL запрос
CtTable - таблица, автоматически генерируется запрос на выборку всех записей по всем полям
CtStoredProc - хранимая процедура DataSource: TDataSourceИсточник данных для мастер датасета MaxBlobSize: integerМаксимальный размер BLOB полей ObjectView: BooleanВключить иерархическое представление для вложенных полей ParamCheck:BooleanОбновлять список параметров при изменении текста команды Params:TparamsСписок параметров команды SortFieldNames: stringСписок полей для сортировки датасета, поля разделяются точкой с запятой. Действует для CommandType ctTable SQLConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БД Tag: integerТэг SQLQuery Запрос к БД (однонаправленный) Active: booleanАктивность запроса DataSource: TDataSourceИсточник данных для мастер датасета MaxBlobSize: integerМаксимальный размер BLOB полей ObjectView: BooleanВключить иерархическое представление для вложенных полей ParamCheck:BooleanОбновлять список параметров при изменении текста запроса Params:TparamsСписок параметров запроса SQL:TStringsТекст запроса SQLConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БД Tag: integerТэг SQLStoredProc Хранимая процедура (в случае получения данных однонаправленная) Active: booleanАктивность хранимой процедуры MaxBlobSize: integerМаксимальный размер BLOB полей ObjectView: BooleanВключить иерархическое представление для вложенных полей ParamCheck:BooleanОбновлять список параметров при изменении процедуры Params:TparamsСписок параметров процедуры SQLConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БД Tag: integerТэг SQLTable Таблица базы данных (однонаправленный датасет) Active: booleanАктивность таблицы IndexFieldNames: stringСписок полей сортировки (через точку с запятой) IndexName: stringИмя индекса сортировки. Возможно использование либо IndexName или IndexFieldNames MasterSource: TdataSourceМастер источник данных для организации отношений главный-подчиненный (master-detail) MasterFields:stringПоля связи главный-подчиненный MaxBlobSize: integerМаксимальный размер BLOB полей ObjectView: BooleanВключить иерархическое представление для вложенных полей SQLConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БД TableName: stringИмя таблицы БД из которой будут выбраны данные Tag: integerТэг SQLMonitor Организация наблюдения за работой компонентов доступа к данным Active: booleanАктивность монитора AutoSave: BooleanАвтоматическое сохранения журнала событий в файл, указанный в FileName FileName: stringИмя файла для хранения журнала событий SQLConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БД Tag: integerТэг TraceList:TstringsЖурнал событий SQLClientDataSet Клиентский датасет общего назначения Active: booleanАктивность датасета Aggregates: TaggregatesСписок доступных агрегатов AggregatesActive: booleanВычисление агрегатов AutoCalcFields: booleanГенерировать событие OnCalcFields и обновлять Lookup поля True -
· при открытии датасета
· при переходе датасета в состояни dsEdit
· Передача фокуса ввода другому компоненту или другому столбцу (для сетки) при наличии изменений в текущей ячейке
False
· при открытии датасета
· при переходе датасета в состояни dsEdit
· Запись извлекается из БД CommandText: stringТекст команды для выполнения (SQL запрос). При установке св-ва FileName данное св-во игнорируется При сбросе флага poAllowCommandText в св-ве Options также текст команды игнорируется CommandType: TSQLCommandTypeТип датасета
CtQuery - SQL запрос
CtTable - таблица, автоматически генерируется запрос на выборку всех записей по всем полям
CtStoredProc - хранимая процедура ConnectionName: stringИмя конфигурации, содержащей параметры соединения. Аналог AliasName в TDatabase для BDE Constraints: TConstraintsОграничения на значения на уровне одной записи DBConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БД DisableStringTrim: booleanУдалять конечные пробелы в строковых полях при их вставке БД FetchOnDemand: booleanПолучать данные по мере необходимости FieldDefs: TFieldDefsОпределения полей FileName: stringИмя файла для сохранения кеша данных Filter: stringФильтр Filtered: BooleanВключение фильтрации FilterOptions: TFilterOptionsПараметры фильтрации IndexDefs: TindexDefsОпределения индексов IndexFieldNames: stringСписок полей сортировки (через точку с запятой) IndexName: stringИмя индекса сортировки. Возможно использование либо IndexName либо IndexFieldNames MasterSource: TdataSourceМастер источник данных для организации отношений главный-подчиненный (master-detail) MasterFields:stringПоля связи главный-подчиненный ObjectView: BooleanВключить иерархическое представление для вложенных полей Options: TProviderOptionsПараметры работы с данными PacketRecord: integerКоличество записей в одном пакете данных
-1 - все
>0 - количество
0 - включать в пакет только метаданные Params: TparamsЗначение параметров для выборки данных ReadOnly: BooleanДоступ только для чтения Tag: integerТэг UpdateMode: TUpdateModeСпособ поиска записи при записи изменений
UpWhereAll - использовать все поля
UpWhereChanged - ключевые поля+старые значения измененных полей
UpWhereKeyOnly - только ключевые поля
Попробуем написать простейшее приложение для просмотра данных из базы в /usr/ibdb (будем считать что папка уже создана). Для этого выполним следующие шаги:

1. Создадим базу данных в Interbase 6. У меня он проинсталировался в /opt/interbase .
1.1 Запустим сервер /opt/interbase/bin/ibguard &
1.2 Войдем в оболочку isql - /opt/interbase/bin/isql
1.3 Введем SQL запросы на создание БД и таблицы users:

createdatabase '/usr/ibdb/test.gdb';
create table users( ID integer not null primary key, NAME varchar(20));
commit;
quit;

Если все выполнено правильно - то в папке /usr/ibdb появится файл test.gdb.
2. Создадим новое приложение. Меню File/NewApplication в IDE Kylix
3. На главной форме приложения разместим с закладки dbExpress компоненты: SQLConnection и SQLDataSet. SQLConnection - это "соедиение" с базой данных, т.е с его помощью можно управлять параметрами соединения, такими как тип драйвера, имя пользователя и пароль. Двойной щелчок левой кнопкой мыши на SQLConnection1 вызовет окно работы с соединениями.
Name - test_connect. После добавления установим следующие параметры:
Database - /usr/ibdb/test.gdb
ServerCharSet - win1251
Кнопкой "ОК" закроем диалог. Свойство Connected установим в True. В диалоге запроса пароля введем пароль masterkey. Соединение установлено.
Компонент SQLClientDataSet1 будет извлекать данные из таблицы users. Почему мы используем его а не SQLQuery? Ответ очень прост - SQLQuery - однонаправленный датасет. Поэтому он не может обеспечить навигации в обе стороны и редактирование данных.
Свойство DBConnection компонента SQLClientDataSet1 установим равным SQLConnection1. Введем запрос на выборку данных из таблицы users - select * from users - в св-во CommandText, либо воспользуемся диалогом для данного св-ва. Активизируем запрос, установив св-во Active в True.
Далее с закладки Data Access на форму положим компонент TDataSource. Данный компонент делает данные из датасетов доступными для отображения в пользовательских элементах управления (сетках итд). Его св-во DataSet установим в ClientDataSet1.
Перейдем на закладку DataControls и с нее разместим на форме сетку данных DBGrid и DBNavigator. Для обоих компонентов св-во DataSource установим в DataSource1. При этом в DBGrid1 появится заголовок с наименованиями полей таблицы users.

Теперь можно запустить приложение на выполнение (F9 однака).


Автор:
Mike Goblin

Взято из

с разрешения автора.






Содержание раздела