Содержание
Урок 1.1. Пишем программу складского учета.
Будем писать программу учета продуктов на складе по средней цене прихода. А для этого нам
нужно научиться работать с базами данных. Начнем работу с создания базы в MS
Access 2007.
Урок 1.2. Создаем главную форму программы склад.
На этом
уроке мы создадим главную форму для нашего склада. Создадим подключение, к
базе, используя компонент TADOConnection. Используемые компоненты (
TADOConnection ).
Урок 1.3. Создаем главную форму программы склад.
На этом
уроке мы продолжим создание главной формы для нашего склада. Разместим
основные компоненты, создадим меню... Используемые компоненты (TADOTable,
TMainMenu).
Урок 1.4. Создаем подчиненные формы для
справочников программы склад.
На этом
уроке мы создадим форму для справочника "Единицы измерения" нашего склада.
Используемые компоненты (TButton, TDBGrid, TDataSource ).
Урок 1.5. Создаем подчиненные формы для
справочников программы склад.
На этом
уроке мы создадим форму для справочника «Категории продуктов» и
«Поставщики» нашего склада. Используемые компоненты (TButton, TDBGrid,
TDataSource ).
Урок 1.6. Создаем подчиненные формы для
справочников программы склад.
На этом
уроке мы создадим форму для справочника «Продукты» нашего склада c
использованием поле Lookup из других таблиц. Используемые компоненты (TButton,
TDBGrid, TDataSource ).
Урок 1.7. Создаем формы прихода продуктов на склад.
На этом
уроке мы создадим формы прихода продуктов на склад. Приход продуктов будет
состоять из трех форм. В первой мы будем хранить данные о приходе. Во
второй, данные о продуктах для каждого прихода. Третья – форма для выбора
продуктов. Используемые компоненты (TButton, TDBGrid, TADOTable, TADOQuery,
DataModule).
Урок 1.8. Создаем формы прихода продуктов на склад.
На этом
уроке мы создадим вторую форму, в которой будут отражаться данные о
продуктах для каждого прихода. Используемые компоненты (TButton, TDBGrid,
TADOTable, TADOQuery, DataModule, TDateTimePicker, TDBLookupComboBox).
Урок 1.9. Создаем формы прихода продуктов на склад.
На этом
уроке мы создадим последнюю форму для прихода продуктов. В ней будет
происходить выбор продуктов прихода. Используемые компоненты (TButton,
TDataSource, TDateTimePicker, TDBLookupComboBox, TDBEdit).
Урок 1.10. Программирование баз данных в Delphi -
создаем формы прихода продуктов на склад.
На этом
уроке мы напишем процедуры для обработки событий для наших форм прихода,
созданных на уроках 1.7. – 1.9.
Урок 1.5.
Программирование
баз данных в Delphi - создаем подчиненные формы для справочников программы
склад
На этом уроке мы создадим форму для справочника «Категории
продуктов» и «Поставщики» нашего склада.
Процесс создания данных форм аналогичен созданию формы для
справочника «Единицы измерения», смотри предыдущий урок. Поэтому описывать буду
достаточно кратко.
Создаем новую форму File->New->Form
–Delphi
В инспекторе объектов
устанавливаем следующие свойства для новой формы
Caption -> Категории продуктов;
FormStyle -> fsMDIChild;
Name -> Form_product_group;
Сохраните модуль с именем product_group.
Пропишем
Uses general; после
раздела implementation в программном
модуле unit product_group как показано
на рисунке.
А программном модуле unit general главной формы пропишем Uses ed_izmer,
product_group;
Далее размещаем на форме следующие компоненты
Три кнопки TButton из
вкладки Standart
В инспекторе объектов для Button1
устанавливаем свойство Caption ->
Новая запись;
для Button2
устанавливаем свойство Caption -> Удалить запись;
для Button3
устанавливаем свойство Caption -> Закрыть.
Из вкладки Data Access помещаем на форму компонент TDataSource.
В инспекторе объектов для него устанавливаем следующие свойства:
DataSet -> Form_general.table_product_group;
Name -> product_group.
А из вкладки Data Controls помещаем на форму компонент TDBGrid.
В инспекторе объектов для него устанавливаем следующие свойства:
DataSource -> product_group.
Если поля таблицы не отображаются в DBGrid,возможно
у вас отключено (False) свойство Active главной форме в инспекторе объектов компонента table_product_group (TADOtable), установите Active ->
True.
Сейчас мы переименуем поля нашей таблице. Для этого перейдем
на главную форму проекта.
Выберем компонент table_product_group (ADOTable) и в структуре (Structure) -> product_group -> Fields -> щелкнем правой кнопкой мыши и выберем Add all fields.
Далее выбираем поле id и в инспекторе объектов
устанавливаем у него свойство Visible->False,
затем выбираем поле
product_name и
в инспекторе объектов устанавливаем у него свойства
DisplayLabel -> Категория продуктов;
DisplayWidth -> 30;
После
этого видим для формы «Категории продуктов»:
Теперь пишем обработчики событий для кнопок.
Щелкнем дважды мышкой по кнопке «Новая запись» и пишем
следующий код:
procedure
TForm_product_group.Button1Click(Sender: TObject); begin //новая запись form_general.table_product_group.Append; dbgrid1.SetFocus; end; |
Щелкнем дважды мышкой по кнопке «Удалить запись» и пишем
следующий код:
procedure
TForm_product_group.Button2Click(Sender: TObject); //удаление записи begin //если записи отсутствуют то выводим сообщение, иначе удаляем запись if
dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if (MessageBox(Handle,
'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then
form_general.table_product_group.Delete end
else ShowMessage('Нет записей для удаления');
end; |
Щелкнем дважды мышкой по кнопке «Закрыть» и пишем
следующий код:
procedure TForm_product_group.Button3Click(Sender:
TObject); begin //закрытие формы Close; end; |
В инспекторе объектов для Form_product_group событие FormActivate
пишем:
procedure
TForm_product_group.FormActivate(Sender: TObject); begin //установка фокуса при активации формы dbgrid1.SetFocus; end; |
В инспекторе объектов для Form_product_group событие FormClose пишем:
procedure
TForm_product_group.FormClose(Sender: TObject; var Action: TCloseAction); begin //процедура закрытия
формы Action:=cafree; end; |
В инспекторе объектов для Form_product_group
событие FormCloseQuery пишем:
procedure
TForm_product_group.FormCloseQuery(Sender: TObject; var CanClose: Boolean); //проверка на наличие пустых записей перед закрытием, если такие
записи найдены то отменяем закрытие формы begin if
dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if not
(form_general.table_product_group.Locate('product_name','',[loCaseInsensitive,loPartialKey]))
then begin
form_general.table_product_group.edit;form_general.table_product_group.post;
end
else begin ShowMessage('У Вас есть не заполненные
записи');CanClose:=false;dbgrid1.SetFocus;end;
end; end; |
Сейчас сделаем запуск справочника «Категории продуктов» из главной формы. Для этого выбираем в меню Project -> Options…
Выбираем Forms и перемещаем Form_product_group из Auto-create forms в Avalable forms.
Переходим на главную форму, щелкаем мышкой по компоненту MainMenu1, а затем по пункту Категории продуктов
И пишем следующий обработчик события:
procedure
TForm_general.N3Click(Sender: TObject); begin f:=0; //проверяем, активна ли наша форма if
ActiveMDIChild.Caption<>'Категории продуктов' then begin //если нет то ищем ее среди неактивных и если находим, то показываем ее for i:=0 to
form_general.MDIChildCount-1 do if
form_general.MDIChildren[i].Caption='Категории продуктов' then begin MDIChildren[i].Show;f:=1;end; end
else f:=1; //если форма еще не создана, то создаем ее if f<>1 then
Tform_product_group.Create(Application); end; |
Вот и все готово, запускаем проект и заполняем справочник
данными, например так:
Создаем
форму для справочника «Поставщики»
Создаем новую форму File->New->Form
–Delphi
В инспекторе объектов
устанавливаем следующие свойства для новой формы
Caption -> Поставщики;
FormStyle -> fsMDIChild;
Name -> Form_postav_ik;
Сохраните модуль с именем postav_ik.
Пропишем Uses general; после раздела implementation в программном модуле unit postav_ik,а в программном модуле unit general главной
формы пропишем Uses ed_izmer, product_group, postav_ik;
Размещаем на форме
компоненты как показано на рисунке:
Далее все делаем аналогично, как для предыдущего
справочника. А я приведу лишь код для обработки событий.
Для кнопки «Новая запись»
procedure
TForm_postav_ik.Button1Click(Sender: TObject); begin //новая запись form_general.table_postav_ik.Append; dbgrid1.SetFocus end; |
Для кнопки «Удалить запись»
procedure
TForm_postav_ik.Button2Click(Sender: TObject); //удаление записи begin //если записи отсутствуют то выводим сообщение, иначе удаляем запись if
dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if (MessageBox(Handle,
'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then
form_general.table_postav_ik.Delete end
else ShowMessage('Нет записей для удаления'); end; |
Для кнопки «Закрыть»
procedure
TForm_postav_ik.Button3Click(Sender: TObject); begin //закрытие формы Close; end; |
Для события FormActivate формы Form_postav_ik
procedure
TForm_postav_ik.FormActivate(Sender: TObject); begin //установка фокуса при активации формы dbgrid1.SetFocus; end; |
Для события FormClose формы Form_postav_ik
procedure
TForm_postav_ik.FormClose(Sender: TObject; var Action: TCloseAction); begin //процедура закрытия формы Action:=cafree; end; |
Для события FormCloseQuery формы Form_postav_ik
procedure
TForm_postav_ik.FormCloseQuery(Sender: TObject; var CanClose: Boolean); //проверка на наличие пустых записей перед закрытием, если такие
записи найдены то отменяем закрытие формы begin if dbgrid1.DataSource.DataSet.RecordCount<>0 then begin if not
(form_general.table_postav_ik.Locate('postav_ik_name','',[loCaseInsensitive,loPartialKey]))
then begin
form_general.table_postav_ik.edit;form_general.table_postav_ik.post; end else begin
ShowMessage('У Вас есть не заполненные записи');CanClose:=false;dbgrid1.SetFocus;end;
end; end; |
Внимание для более корректной работы по полю 'postav_ik_name' необходимо добавить проверку на null (т.е. в поле данные не вводились совсем). Для главной формы Form_general при нажатии на кнопку Категории продуктов выпадающего меню
procedure
TForm_general.N5Click(Sender: TObject); begin f:=0; //проверяем, активна ли наша форма if
ActiveMDIChild.Caption<>'Поставщики' then begin //если нет то ищем ее среди неактивных и если находим, то показываем ее for i:=0 to form_general.MDIChildCount-1
do if
form_general.MDIChildren[i].Caption='Поставщики' then begin
MDIChildren[i].Show;f:=1;end; end
else f:=1; //если форма еще не создана, то создаем ее if f<>1 then
Tform_postav_ik.Create(Application); end; |
Запускаем
проект и заполняем справочник данными.
Скачать исходники проекта можно здесь.
|