ЛАБОРАТОРНАЯ РАБОТА № 12. Тема: Создание формы для учета расхода продуктов на складе
Тема: Создание формы для учета расхода продуктов на складе
Цель: Научиться работать с TQuery
Оборудование и/или программное обеспечение: ПК, Delphi
Теоретическая часть
Связь компонентов с базами данных
Компоненты, используемые для работы с базами данных через BDE, расположены в библиотеке компонентов на страницах Data Access (доступ к данным) и Data Control (управление данными).
Каждое приложение, использующее базы данных, обычно имеет по крайней мере по одному компоненту следующих трех типов:
■ Компоненты — наборы данных (data set), непосредственно связывающиеся с базой данных. Это такие компоненты, как Table, Query, StoredProc.
■ Компонент — источник данных (data source), осуществляющий обмен информацией между компонентами первого типа и компонентами визуализации и управления данными. Таким компонентом является DataSource.
■ Компоненты визуализации и управления данными, такие, как DBGrid, DBText, DBEdit и множество других.
Связь этих компонентов друг с другом и с базой данных можно представить схемой, приведенной на рис. 3.1.
Рис. 3.1
Схема взаимодействия компонентов Delphi с базой данных
Помимо указанных компонентов в приложении может размещаться компонент Database. Этот компонент в основном используется в приложениях, работающих на платформе клиент/сер-вер. Его задачи связаны с общением с удаленным сервером, реализацией транзакций, работой с паролями. Если компонент Database не введен в приложение явно, Delphi автоматически создает его для каждой используемой в приложении базы данных.
Еще один компонент, который тоже автоматически создается Delphi — компонент Session. Это главный компонент любого приложения, работающего с базами данных. Но в явном виде эти компоненты имеет смысл вводить только в многозадачные приложения, в которых параллельно обрабатывается несколько потоков информации. Компонент Session был подробно рассмотрен в книге «Работа с локальными базами данных в Delphi 5» серии «Все о Delphi» и в данной книге этот материал не дублируется.
Возможности приложения, работающего с базами данных, определяются прежде всего тем, какой компонент используется для создания набора данных — Table или Query. Компонент Table не использует в явном виде запросов SQL. Точнее он их использует, но они остаются для пользователя за кадром. Компонент Query специально предназначен для работы с запросами SQL.
Если запрос SQL сводится к просмотру таблицы (запрос Select), то результаты этого запроса (а не сама исходная таблица) помещается во временном файле на компьютере пользователя. Правда, в отличие от набора данных, создаваемого Table, это таблица только для чтения и не допускает каких-то изменений. Впрочем, это ограничение можно обойти, и в дальнейшем будет показано, как это можно делать. Если же запрос SQL связан с какими-то изменениями содержания таблицы, то никаких временных таблиц не создается. BDE передает запрос на сервер, там он обрабатывается и в приложение возвращается информация о том, успешно ли завершена соответствующая операция. Благодаря такой организации работы эффективность Query при работе в сети становится много выше, чем эффективность Table. К тому же язык SQL, рассмотренный в главе 2, позволяет формулировать сложные запросы, которые не всегда можно реализовать в Table.
Практическая часть
На этом уроке мы поговорим о создании форм расхода продуктов на складе. Учет расхода также как и учет прихода будет состоять из трех форм. В первой форме будем выводить номер накладной расхода, дату расхода и сумму расхода по накладной.
Во второй форме будем выводить список продуктов выбранных для расхода с количеством, ценой и на какую сумму.
Ну и в третьей форме мы будем производить выбор продуктов для учета расхода.
Как вы видите, первые две формы учета расхода практически не отличаются от первых двух форм учета прихода за одним исключением из второй формы учета расхода убрано поле поставщик. Поэтому и создание этих форм чисто технически не отличается от создания форм прихода. Я например создал первые две формы простым копированием содержимого из форм прихода. Затем переименовал названия компонентов (точнее заменил слово prihod в rashod_doc, а слово storage в rashod) и подключил одноименные таблицы. А затем написал процедуры обработки форм расхода аналогичные процедурам обработки форм прихода.
Поэтому если вы разобрались с написанием форм прихода на предыдущих уроках, у вас не должно возникнуть проблем и с созданием первых двух форм расхода. А вот по созданию формы выбора продуктов расхода я немного поясню.
Данная форма содержит:
Фильтр по категории продуктов, который активируется по событию OnClick на компоненте CheckBox и выбору категории из выпадающего списка DBLookupComboBox, подключенного к справочнику категория продуктов;
Таблицу DBgrid подключенную к запросу ADOQuery_ostatki_copy (который является копией запроса ADOQuery_ostatki). В нее выводятся список остатков продуктов на складе;
Пять полей DBEdit подключенных к таблице rashod. При двойном клике на поле DBGridа данные из DBGrida (Продукт, единица измерения, средняя цена автоматически заносятся в соответствующие поля, курсор устанавливается в поле количество). При нажатии кнопки ОК, данные заносятся в таблицу rashod базы данных после прохождения проверки корректности заполненных полей. При попытке ввести количество продуктов больше чем есть на складе, вызывается предупреждение. В случае отмены данные не сохраняются.
Кроме того я добавил выделение зеленым цветом нулевых и красным цветом отрицательных остатков.
Так как это у нас уроки по базе данных, я предлагаю создать вам все три формы для учета расхода самостоятельно. Но вы всегда можете скачать готовый исходник к уроку и использовать его как шпаргалку. Если возникнут вопросы по созданию форм для данного урока, задавайте в комментариях, попробую помочь.
Вопросы для контроля
1. Где найти компонент CheckBox и для чего он служит?
2. Что такое DBLookupComboBox и для чего служит?
3. Где найти компонент Table и для чего он служит?
4. Где найти компонент Query и для чего он служит?
5. Где найти компонент StoredProc и для чего он служит?
Литература
1. Бобровский С.И. Delphi 7. Учебный курс. - СПб.: Питер, 2005.
2. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Visual Basic, C++ Builder, Delphi. - СПб.: БХВ - Петербург, 2005.