Глава 5. СОЗДАЕМ ОКОННЫЙ ИНТЕРФЕЙС «ПОСТУПЛЕНИЯ НА СКЛАД»
Оконный интерфейс «Поступления на склад», добавляем компоненты.
Войдем в режим «Дизайнер» и откроем проект stock
_in_project.ipr с помощью меню Файл
/Открыть проект. Займемся добавлением компонентов на форму StockInForm
. Компоненты расположены на палитрах с закладками Standard, Additional
, и так далее:
Для того чтобы добавить компонент на форму, нужно сначала
выбрать соответствующую палитру, щелкнув на ее закладке, выбрать
компонент на палитре одиночным щелчком мыши, а затем щелкнуть
однократно на форме в том месте, куда мы желаем
поставить компонент. «Перетаскивать» компоненты с палитры на
форму не нужно!
Для изменения значений свойств компонента, нужно выбрать соответствующий компонент
на форме, щелкнув на нем мышью один раз.
У компонента появляются квадратные точки по его периметру (с
их помощью можно изменять его размеры), а свойства компонента
отображаются в Инспекторе объектов.
Хорошим стилем программирования считается назначать свойство Name компонентов в соответствие
с какой-то системой, а не оставлять их
названия по умолчанию, которые присваиваются системой (Button1,
Button2, Panel1 и т.д.). Вы можете
разработать свой стиль называния компонентов. Мы с вами уже
придерживались некоторой системы, дав название форме StockInForm, добавив
имя класса Form в качестве суффикса. Мы будем использовать
этот стиль для того, чтобы называть формы и панели
. Для остальных компонентов мы будем использовать префикс из трех
-четырех букв, говорящий нам о том, какого
рода это компонент. Например, для кнопок будем использовать
префикс btn, для запросов префикс qry, и так
далее.
Расположим на форме следующие компоненты последовательно, один за другим
, сразу назначая им свойства в Инспекторе объектов:
Панель Panel (палитра Standard)
Align = alTop
Height = 80
Caption = ‘’
Name = TopPanel
BevelOuter = bvNone
Сетка DBGridA (палитра Allegro)
Align = alTop
Height = 200
Name = dbgDetail
Сплиттер Splitter (палитра Additional)
Align = alTop
AutoSnap = False
Сетка DBGrid (палитра DataControls)
Align = alClient
Name = dbgGoods
Добавим компонент транзакции:
IBTransaction (палитра InterBase)
DefaultAction = taRollBack
DefaultDatabase = MainConnection.MainDatabase
Name = traCurrent
Дважды щелкнем на компоненте транзакции и в появившемся редакторе свойств
компонента установим изоляцию транзакций Read Committed:
В режиме изоляции транзакций Read Committed пользователь сможет видеть все
изменения, сделанные и подтвержденные в других транзакциях другими пользователями
.
Добавим два компонента SQL-запросов. Один для главной
таблицы документа, другой для подчиненной:
Компонент SQL-запроса IBDataSet (палитра InterBase)
Name = qryMaster
Transaction = traCurrent
Компонент SQL-запроса IBDataSet (палитра InterBase)
Name = qryDetail
Transaction = traCurrent
Добавим два компонента DataSource с палитры InterBase. Если там
Вы не можете найти этот класс компонентов, то поищите
его на палитре DataAccess:
Компонент DataSource (палитра InterBase)
Name = dsrMaster
DataSet = qryMaster
Компонент DataSource (палитра InterBase)
Name = dsrDetail
DataSet = qryDetail
Дело в том, что экранные компоненты (сетки,
и т.п.) не работают с компонентами запросов
напрямую, а подключаются к ним через компоненты класса TDataSource
. Это особенность реализации VCL-библиотеки Delphi.
Назначим у сетки dbgDetail свойство DataSource = dsrDetail.
Компоненты запросов с палитры InterBase работают с сервером Firebird напрямую
. Практически вся работа с базой данных осуществляется при помощи
этих компонентов. Поэтому Вы должны хорошо изучить, как
ими пользоваться. В большинстве случаев нам достаточно будет компонента
IBDataSet. Этот компонент имеет 5 свойств, в которых
хранятся тексты SQL-запросов (SelectSQL, InsertSQL,
ModifySQL, DeleteSQL, RefreshSQL). В зависимости от состояния
, в котором находится компонент, он посылает соответствующие SQL
-запросы на сервер. С помощью запроса, записанного
в SelectSQL, например, компонент получает набор данных с
сервера.
Посмотрим, как это происходит.
Выберем компонент запроса qryDetail Дважды щелкнем на его свойстве SelectSQL
в «Инспекторе объектов». Выберем в появившемся диалоге в
верхнем списке таблицу STOCK_IN_ITEM и нажмем
кнопку Add Table to SQL:
Вставим звездочку * между словами select и from и нажмем
кнопку OK. Фактически мы вписали текст простейшего SQL-
запроса, с помощью которого можно получить данные из подчиненной
таблицы документа. В дальнейшем мы усложним этот текст,
а пока давайте активизируем запрос, установив у компонента qryDetail
в Инспекторе объектов свойство Active = True.
Мы видим, что в результате выполненного SQL-запроса
, компонент получил с сервера набор данных и отобразил его
в сетке. Сохраним все. Запустим проект с помощью
F9. Конечно, это еще мало похоже на готовый
интерфейс ввода данных, но зато это уже работает!
Для того чтобы довести это окно до «товарного вида
» нам еще предстоит внести в него целый ряд усовершенствований
…
|