Kest
Для начала создания приложения в среде Delphi необходимо подключить базу данных. Это очень легко производится с помощью компонента TOracleSession. Вам просто необходимо положить этот компонент на форму и сделать некоторые настройки. Укажите свойства LogonUsername, LogonPassword и LogonDatabase. Затем вызовите метод LogOn или установите свойство Connected в положение True.
Вообще, как правило, все не визуальные компоненты, такие как TTimer, TOpenDialog, TimageList и др., группируются в создаваемой программе в специальном модуле данных TDataModule. Модуль данных представляет собой хранилище объектов, которое позволяет централизованно управлять их работой и отделяет программную логику, связанную с базой данных, от программного кода, выполняющего вычислительные действия и отображение данных на форме. Для создания нового модуля данных необходимо зайти в соответствующий пункт меню (см. Рисунок 3.1).
Рисунок 3.1 - Создание Data Module
Далее нам необходимо выбрать нужные данные из базы данных. Для этого используем компоненты TOracleDataSet и TOracleQuery. Поместите компонент типаTOracleDataSet в ваш DataModule и назовите его odsTitle. Компонент TOracleQuery позволяет очень гибко, визуально или программно, определить условие отбора записей из нескольких таблиц, а работать с итоговым набором отобранных записей можно обычным способом. Для того, чтобы выполнить написанный вами запрос, нужно установить значение свойства Active в True или вызвать метод Open. На Рисунок 3.2. показан пример установки значения True в свойстве Activeдля OracleDataSet5.
Рисунок 3.2. - Значение True в свойстве Active
В свойстве Sequence Field можно указать последовательность, значение из которой будет автоматически подставляться в указанное поле. На Рисунке 3.3 показан пример.
Рисунок 3.3 - Работа с Sequence Field
Вообще, для связи набора данных TOracleDataSet с data-aware компонентами необходимо использовать TDataSource. На Рисунке 3.4. показана схема взаимодействия. Как видно из рисунка, TDataSource является связным звеном между компонентами data-aware и TOracleDataSet. Компонент TDataSourceпозволяет абстрагироваться от конкретной СУБД. Например, если потребуется преобразовать имеющееся приложение в многопользовательский справочник, то достаточно настроить таблицы на другую СУБД с аналогичной схемой БД, способную работать в сети. Элементы управления этого не заметят, потому что будут обращаться к источнику данных, а не к конкретным таблицам. В нашем случае каждый источник данных после размещения в модуле данных связывается с конкретной таблицей с помощью свойства TOracleDataSet.
Рисунок 3.4. - Схема взаимодействия.
Обратите внимание на следующий факт!!! Для того, чтобы в инспекторе объектов в выпадающих списках свойств были доступны компоненты, находящиеся в другом модуле, необходимо его указать с помощью команды меню File/Use Unit (см. Рисунок 3.5.) или воспользоваться одновременным нажатием клавиш Alt+F11.
Рисунок 3.5. - Use Unit.
Чтобы просмотреть значения из нашего набора данных , нужно разместить на форме какие-либо компоненты с вкладки "DataControls", например TDBGrid , он отображает данные в виде таблицы. В свойстве DataSource укажите odsTitle.
Для того чтобы получить возможность редактировать, добавлять или удалять записи таблицы, писать программный код не требуется. Достаточно разместить на форме компонент TDBGrid. В его свойстве DataSource следует указать нужный источник данных. Двойным нажатием на Grid вызывается редактор полей, нажмите в нём кнопку "Add All Fields" чтобы добавить все поля из набора данных. Здесь для каждого поля можете указать его ширину, название поля и многое другое. Для поля TITL_ID свойство Visible установите в False чтобы оно не отображалось в таблице. Пример на Рисунке 3.6.
Рисунок 3.6. - Редактирование колонок.
Для упрощения навигации по таблице (что немаловажно, если в ней очень много записей) имеется компонент TOracleNavigator. (см. Рисунок 3.7.) Он обычно размещается на форме под компонентом TDBGrid и привязывается к нему через свойство DataSource. Значение этого свойства должно совпадать со значением такого же свойства связной таблицы. Навигатор позволяет перемещаться по набору записей вперед и назад, переходить к первой и последней записи и выполнять ряд других функций. Функции Навигатора доступны как при щелчках на его кнопках во время работы приложения, так и из программного кода.
Рисунок 3.7. - Компонент Navigator.
Часто, чтобы отобразить данные из двух таблиц связанных отношением "один ко многим" используют механизм master-detail (главный-подчинённый). В нашем случае такими являются таблицы TITLE и TITLE_COPY. Попробуем сделать так, чтобы при выборе какой-либо кассеты отображались все имеющиеся копии. Действуйте по следующему алгоритму:
1) Положите в DataModule ещё один TOracleDataSet;
2) В свойстве SQL напишите запрос для выбора всех записей из таблицы TITLE_COPY;
3) В свойстве Master укажите odsTitle;
4) На форму добавьте ТDBGrid и свяжите его с новым набором данных;
5) Протестируйте приложение.
Одной из самых важных функций при работе с базой данных является функция поиска. В Delphi есть множество способов реализации этой задачи. Мы рассмотрим наиболее удобный и самый эффективный - с помощью переменных запроса. Для примера сделаем поиск кассет по названию. Для этого просто добавьте в ваш запрос выбора кассет ещё одно условие: " where t.title like :name ". Здесь :name - это имя переменной, оно может быть любым, но должно начинаться с двоеточия. Затем откройте свойство Variables и нажмите кнопку Scan SQL. Настройте переменную :name в соответствии с Рисунком 3.8.
Рисунок 3.8. - Настройка переменной :name.
После настройки переменной, расположите на форме простой TEdit, в который мы будем писать строку поиска, и кнопку для выполнения поиска. Чтобы изменить значение переменной в процессе выполнения программы используйте метод SetVariable. После изменения следует добавить код для переоткрытия набора данных (методы close и open). Проверьте ваш поиск на работоспособность.
Теперь займемся реализацией такой функции как оформление проката. Для получения положительного результата воспользуйтесь приведенной ниже последовательностью действий:
1) Создайте новую форму со всеми необходимыми полями;
2) В DataModule добавьте TOracleDataSet, выбирающий данные из таблицы RENTAL;
3) Свяжите его с помощью механизма master-detail c таблицей TITLE_COPY;
Для выбора клиента из справочника удобно использовать компонент типа TDBLookupComboBox (закладка меню Data Controls). В свойстве ListSourse нужно указать DataSourse связанный со справочником клиентов, в ListField - поле, которое будет отображаться (last_name), в KeyField - ключевое поле (member_id).
4) Расположите на форме пару кнопок, "Сохранить" и "Отменить", которые будут вызывать методы Post и Cancel соответственно;
5) На главную форму добавьте кнопку для вызова формы оформления проката (используйте метод ShowModal);
6) Добавьте в код вызов метода Append;
7) Сделайте кнопку доступной (свойство Enabled) только если выбранная кассета имеется в наличии;
Для проверки значения поля STATUS используйте метод FieldByName. Проверку следует осуществлять в момент совершения события OnDataChange компонентаDataSource, связанного с TITLE_COPY.
В данном разделе были рассмотрены основные этапы создания пользовательского приложения. Дальнейшая реализация каких-либо функций требует индивидуального подхода. В следующем разделе будет рассмотрено множество функций для автоматизации Видео проката.
Для компонентов редактирования полей "рейтинг" и "категория" (типа TDBComboBox) в свойстве Items нужно указать возможные значения, (NR,R,PG,G) и (CHILD,SCIFI,Comedy,Action) соответственно.