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

Фирма Borland в Kylix и Delphi 6 реализовала новый движок для работы с базой данных dbExpress. Данный движок предназначен для работы с серверными БД. На сегодняшний день поддерживаются MySQL, Oracle, Interbase, DB2. К сожалению, на момент выпуска Kylix он работал не со всеми версиями MySQL. В частности, он не заработал с MySQL 3.23.22-beta. За неимением Oracle и DB2 я пользовался Interbase 6, находившемся на втором диске дистрибутива.
Архитектура доступа к данным
В самом виде приложение для работы с базами данных может быть представлено в следующем виде:
clip0036
Ничего принципиально нового здесь нет, по сравнению с Delphi. Но это только на первый взгляд. В dbExpress датасеты делятся на два вида:
1. Клиентский датасет (client dataset)
2. Однонаправленные датасеты (unidirectional dataset)
Клиентский датасет хранит выбранные записи в памяти. Это позволяет осуществлять навигацию в любом направлении, фильтровать записи, кешировать изменения итд. Именно данный вид используется для отображения данных пользователю.
Однонаправленные запросы не кешируют данные. Передвигаться по ним можно только в направлении указанном в конструкции ORDER BY SQL запроса, данные не могут быть изменены. Однако они предоставляют быстрый доступ к большим массивам записей.
Компоненты закладки dbExpress
Посмотрим, что приготовила нам фирма Borland по части компонентов на закладке dbExpressСвойстваОписаниеSQLConnectionКомпонент для организации связи с сервером базы данных. Аналог Database в BDE. Позволяет управлять параметрами соединения с сервером БД, такие как путь к базе данных, имя и пароль пользователя итд.Connected:booleanПризнак установления соединения с БД. True - соединение активно.ConnectionName: stringИмя конфигурации, содержащей параметры соединения. Аналог AliasName в TDatabase для BDEDriverName: stringИмя драйвера для соединения. (DB2, Interbase,Oracle, MySQL). Устанавливается автоматически при установке св-ва ConnectionNameKeepConnection: booleanПоддерживать соединение с сервером БД, если в приложении нет активизированных датасетов.LibraryName: stringИмя библиотеки, содержащей драйвер для связи с сервером БДLoadParamsOnConnect: booleanЗагружать ли параметры соединения, ассоциированные с именем соединения, перед установкой соединения в run time. Полезно в случае когда параметры соединения могут быть изменены вне приложения или меняются в design timeLoginPrompt: 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 ctTableSQLConnection: 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 или IndexFieldNamesMasterSource: TdataSourceМастер источник данных для организации отношений главный-подчиненный (master-detail)MasterFields:stringПоля связи главный-подчиненныйMaxBlobSize: integerМаксимальный размер BLOB полейObjectView: BooleanВключить иерархическое представление для вложенных полейSQLConnection: TSQLConnectionИмя компонента SQLConnection через который будет происходить работа с БДTableName: stringИмя таблицы БД из которой будут выбраны данныеTag: integerТэгSQLMonitorОрганизация наблюдения за работой компонентов доступа к даннымActive: booleanАктивность монитораAutoSave: BooleanАвтоматическое сохранения журнала событий в файл, указанный в FileNameFileName: 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 для BDEConstraints: 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 либо IndexFieldNamesMasterSource: 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:

create database '/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
Взято с сайта http://www.delphimaster.ru/
с разрешения автора.

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...