Помощь в написании студенческих работ
Антистрессовый сервис

Основная работа приложения

РефератПомощь в написанииУзнать стоимостьмоей работы

Но передо мной встала проблема: при удалении запись не успевала удаляться из базы до обновления, в результате чего могла произойти ошибка. Для решения данной проблемы я установил на форме компонент Timer, посредства этого компонента я задал промежуток времени, через который выполнится обновление: При нажатии на кнопку Добавит загружается форма Добавление товара на склад, на которой находятся… Читать ещё >

Основная работа приложения (реферат, курсовая, диплом, контрольная)

В главной форме в меню Информация существуют 3 элемента: Товар, Производители и Поставщики. Эти формы позволяют добавлять и удалять данные в словари.

На форме Товар (Рисунок 2) расположены кнопки Добавить, Удалить и Выход.

Форма Товар.

Рисунок 2. Форма Товар Как видно на этой форме отображаются записи в виде таблицы Товар и при помощи навигатора можно переходить между записями.

При нажатии кнопки Добавить загружается форма Добавления товара (Рисунок 3).

Форма Добавления товара.

Рисунок 3. Форма Добавления товара.

При загрузки формы Добавления товара, в котором можно добавить запись, введя название товара в поле и нажав кнопку Да. При нажатии кнопки да выполняется следующая процедура:

procedure Tform9. Button1Click (Sender: Tobject);

begin.

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add (`select Name from Tovar where Name="'+Edit1.Text+'"');

ADOQuery1.Open;

if (Edit1.Text='') then.

ShowMessage (`Заполните поле').

else if ADOQuery1. RecordCount>0 then.

ShowMessage ('Эта запись уже присутствует в базе').

else begin.

Form3.ADOQuery1.Close;

Form3.ADOQuery1.SQL.Clear;

Form3.ADOQuery1.SQL.Add (`select * from Tovar `);

Form3.ADOQuery1.Open;

Form3.ADOQuery1.Append;

Form3.ADOQuery1.FieldValues[`Name']: =Edit1.Text;

Form3.ADOQuery1.Post;

Form3.ADOQuery1.Close;

Form3.ADOQuery1.Open;

if (Application.MessageBox (`Запись добавлена. Продолжить?','Добавление записи', mb_YesNo+mb_iconQuestion)=IDYes) then.

begin Edit1. Clear;

end.

else.

begin Edit1. Clear;

Close.

end;

end;

end;

При нажатии на эту кнопку загружается запрос по определенному критерию и проверяется условие идентичности записи, дальше при отсутствии похожей записи загружается общий запрос и новой записи в базе присваивается значение поля. Дальше поле очищается и форма закрывается. При найденной похожей записи всплывает сообщение о том, что эта запись уже есть в базе и процедура закрывается.

При выборе кнопки Удалить, всплывает сообщение «Действительно ли вы хотите удалить запись», при подтверждении запись удаляется и через некоторое время посылается запрос на обновление.

Procedure Tform3. Button2Click (Sender: Tobject);

begin.

If (Application.MessageBox (`Вы действительно хотите удалить запись?','Удаление записи', mb_YesNo+mb_iconQuestion)=IDYes) then.

AdoQuery1.Delete.

else exit.

end;

В остальных словарях (Поставщики и Производители) все процедуры выполняются идентично с предыдущей, кроме словаря Производители в нем больше атрибутов и только.

Основные формы (Склад и Магазин).

В меню Наличие товара, на главной форме, можно открыть формы Склад и Магазин. При выборе формы Склад, открывается следующая форма (Рисунок 4):

Форма Склад.

Рисунок 4. Форма Склад.

На этой форме в отличии от словарей расположена таблица с множеством атрибутов. При загрузки формы выполняется запрос к базе:

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add ('select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, Sclad. Col, Sclad. Code, Sclad. DataPost from Tovar, Proizvodit, Post, Sclad where Tovar. Code=Sclad.NameTov and Proizvodit. Code=Sclad.Proizv and Post. Code=Sclad.Post');

ADOQuery1.Open;

При нажатии на кнопку Добавит загружается форма Добавление товара на склад, на которой находятся компоненты ComboBox при помощи, которых можно выбирать из списка необходимые данные. При нажатии на этот компонент выполняется запрос к базе по средствам следующего кода:

procedure Tform27. ComboBox3Enter (Sender: Tobject);

begin.

ComboBox3.Clear;

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add (`select Name from Tovar');

ADOQuery1.Open;

ADOQuery1.First;

while not ADOQuery1. Eof do.

begin.

ComboBox3.Items.Add (ADOQuery1.FieldValues[`Name']);

ADOQuery1.Next;

end;

end;

В этом коде загружается запрос, и выбранные данные добавляются в список этого компонента.

Добавление записи можно осуществить, заполнив все поля и нажав кнопку Да. При нажатии на эту кнопку выполняется следующая процедура:

procedure Tform12. Button1Click (Sender: Tobject);

var A, Y, U:integer;

begin.

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add (`select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, Sclad. Col, Sclad. Code, Sclad. DataPost from Tovar, Proizvodit, Post, Sclad where Tovar. Code=Sclad.NameTov and Proizvodit. Code=Sclad.Proizv and Post. Code=Sclad.Post');

ADOQuery2.Open;

if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (ComboBox1.Text='') or (ComboBox2.Text='') or (ComboBox3.Text='') then ShowMessage (`Заполните поля').

Else if ADOQuery2. Locate (`Tovar.Name;MarkaTov;Proizvodit.Name;NameFirm', VarArrayOf ([ComboBox3.Text, Edit1. Text, ComboBox1. Text, ComboBox2. Text]),[]) then ShowMessage (`Эта запись уже присутствует в базе').

else begin.

Form5.ADOQuery1.Close;

Form5.ADOQuery1.SQL.Clear;

Form5.ADOQuery1.SQL.Add (`select Post. NameFirm, Post. Code, Proizvodit. Code, Proizvodit.Name, Tovar. Code, Tovar.Name from Tovar, Proizvodit, Post `);

Form5.ADOQuery1.SQL.Add (`where Post. NameFirm="'+ComboBox2.Text+ `" and Proizvodit.Name="'+ComboBox1.Text+ `" and Tovar.Name="'+ComboBox3.Text+ `"');

Form5.ADOQuery1.Open;

A:=Form5.ADOQuery1.FieldValues[`Post.Code'];

Y:=Form5.ADOQuery1.FieldValues[`Proizvodit.Code'];

U:=Form5.ADOQuery1.FieldValues[`Tovar.Code'];

Form5.ADOQuery1.Close;

Form5.ADOQuery1.SQL.Clear;

Form5.ADOQuery1.SQL.Add (`select * from Sclad `);

Form5.ADOQuery1.Open;

Form5.ADOQuery1.Append;

Form5.ADOQuery1.FieldValues[`NameTov']: =U;

Form5.ADOQuery1.FieldValues[`MarkaTov']: =Edit1.Text;

Form5.ADOQuery1.FieldValues[`Proizv']: =Y;

Form5.ADOQuery1.FieldValues[`Post']: =A;

Form5.ADOQuery1.FieldValues[`Col']: =Edit2.Text;

Form5.ADOQuery1.FieldValues[`DataPost']: =Edit3.Text;

Form5.ADOQuery1.Post;

Form5.ADOQuery1.Close;

Form5.ADOQuery1.SQL.Clear;

Form5.ADOQuery1.SQL.Add (`select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, Sclad. Col, Sclad. Code, Sclad. DataPost from Tovar, Proizvodit, Post, Sclad where Tovar. Code=Sclad.NameTov and Proizvodit. Code=Sclad.Proizv and Post. Code=Sclad.Post');

Form5.ADOQuery1.Open;

if (Application.MessageBox (`Запись добавлена. Продолжить?','Добавление записи', mb_YesNo+mb_iconQuestion)=IDYes) then begin Edit1. Clear; Edit2. Clear; Edit3. Clear; ComboBox2. Clear; ComboBox3. Clear; ComboBox1. Clear; end else begin Edit1. Clear; Edit2. Clear; Edit3. Clear; ComboBox2. Clear; ComboBox3. Clear; ComboBox1. Clear; Close.

end;

end;

end;

В этой процедуре сначала загружается запрос по определенному критерию и за тем проверяется условие на идентичность, при выявлении похожей записи в базе всплывает сообщение о присутствии похожей записи в базе и осуществляется выход из процедуры.

При отсутствии похожей записи выполняется новый запрос и добавляется запись в базу, но вместо названия товара, поставщика и производителя добавляется код этих данных взятых из словарей.

Дальше очищаются поля и форма, закрывается при всплывающем сообщении о том, что запись успешно добавлена, и продолжить добавление или нет.

При выборе кнопки отмена выполняется следующая процедура:

procedure Tform12. Button2Click (Sender: Tobject);

begin.

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

ComboBox2.Clear;

ComboBox1.Clear;

ComboBox3.Clear;

close;

end;

Просто очищаются все поля и форма закрывается.

При нажатии на кнопку Удалить выполнялась следующая процедура:

procedure Tform5. Button2Click (Sender: Tobject);

var i: integer;

begin.

if (ADOQuery1.Active=true) and (ADOQuery1.RecordCount>0) then.

begin.

If (Application.MessageBox (`Вы действительно хотите удалить запись?','Удаление записи', mb_YesNo+mb_iconQuestion)=IDYes) then.

begin.

ADOQuery2.Close;

ADOQuery2.SQL.Clear;

i:=ADOQuery1.FieldValues[`Code'];

ADOQuery2.SQL.Add (`select * from Sclad where Code='+inttostr (i));

ADOQuery2.Open;

AdoQuery2.Delete;

ADOQuery2.Close;

Timer1.Enabled:=true;

end;

end.

else ShowMessage (`Не возможно удалить запись');

Button2.Enabled:=false;

end;

При выполнений данной процедуры переменой I присваивается тип целого числа и проверяется активность ADOQuery, то есть, подключена ли база и есть ли записи в ней, при положительном результате всплывает сообщение о том, что хотите ли вы удалить эту запись.

Переменой I присваивается код активной записи. При положительном ответе на сообщение выполняется запрос к базе и удаляется необходимая запись и включается таймер, а кнопка Удалить становиться не активной.

Но передо мной встала проблема: при удалении запись не успевала удаляться из базы до обновления, в результате чего могла произойти ошибка. Для решения данной проблемы я установил на форме компонент Timer, посредства этого компонента я задал промежуток времени, через который выполнится обновление:

procedure Tform5. Timer1Timer (Sender: Tobject);

begin.

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add (`select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, Sclad. Col, Sclad. Code, Sclad. DataPost from Tovar, Proizvodit, Post, Sclad where Tovar. Code=Sclad.NameTov and Proizvodit. Code=Sclad.Proizv and Post. Code=Sclad.Post');

ADOQuery1.Open;

Button2.Enabled:=true;

Timer1.Enabled:=False;

end;

И выключится таймер, а кнопка Удалить станет активной.

При выборе кнопки Поиска загружается форма Поиска товара на складе (Рисунок 5).

Форма Поиск товара на складе.

Рисунок 5. Форма Поиск товара на складе.

В этой форме также загружаются поля со списками, как и в предыдущей форме и также есть кнопка Отмены.

При выборе необходимых критериев для писка, нажав кнопку Найти выполняется следующая процедура:

procedure Tform11. Button1Click (Sender: Tobject);

begin.

if (ComboBox3.Text'') and (ComboBox1.Text'') and (ComboBox2.Text'') and (Edit1.Text'') and (Edit2.Text'') and (Edit3.Text'') then ShowMessage (`Укажите параметры поиска').

else begin.

Form5.ADOQuery1.Close;

Form5.ADOQuery1.SQL.Clear;

Form5.ADOQuery1.SQL.Add (`select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, Sclad. Col, Sclad. Code, Sclad. DataPost from Tovar, Proizvodit, Post, Sclad `);

Form5.ADOQuery1.SQL.Add (`where Tovar. Code=Sclad.NameTov and Proizvodit. Code=Sclad.Proizv and Post. Code=Sclad.Post and');

if (ComboBox3.Text'') then.

Form5.ADOQuery1.SQL.Add (`Tovar.Name Like «'+ComboBox3.Text+ `%"');

if (Edit1.Text'') then begin.

if (ComboBox3.Text'') then.

Form5.ADOQuery1.SQL.Add (`and');

Form5.ADOQuery1.SQL.Add (`Sclad.MarkaTov Like «'+Edit1.Text+'%"');

end;

if (ComboBox1.text'') then begin.

if (ComboBox3.Text'') or (Edit1.Text'') then.

Form5.ADOQuery1.SQL.Add (`and');

Form5.ADOQuery1.SQL.Add (`Proizvodit.Name Like «'+ComboBox1.text+'%"');

end;

if (ComboBox2.Text'') then begin.

if (ComboBox3.Text'') or (Edit1.Text'') or (ComboBox1.text'') then.

Form5.ADOQuery1.SQL.Add (`and');

Form5.ADOQuery1.SQL.Add (`Post.NameFirm Like «'+ComboBox2.Text+'%"');

end;

if (Edit2.Text'') then begin.

if (ComboBox3.Text'') or (Edit1.Text'') or (ComboBox1.text'') or (ComboBox2.text'') then.

Form5.ADOQuery1.SQL.Add (`and');

Form5.ADOQuery1.SQL.Add (`Sclad.Col Like «'+Edit2.Text+'%"');

end;

if (Edit3.Text'') then begin.

if (ComboBox3.Text'') or (Edit1.Text'') or (ComboBox1.text'') or (ComboBox2.text'') or (Edit2.Text'') then.

Form5.ADOQuery1.SQL.Add (`and');

Form5.ADOQuery1.SQL.Add (`Sclad.DataPost Like «'+Edit3.Text+'%"');

end;

Form5.ADOQuery1.Open;

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

ComboBox2.Clear;

ComboBox3.Clear;

ComboBox1.Clear;

Close;

ShowMessage (`Количество отобранных записей: `+inttostr (Form5.ADOQuery1.RecordCount)).

end;

end;

С начала этой процедуры проверяется наличие критериев, при их отсутствии всплывает сообщение «Укажите параметры поиска». При существовании критериев загружается запрос, и все поля сверяются на идентичность. При нахождении одинаковых записей выводится сообщение о найденных записях и о их количестве.

При нажатии кнопки Редактировать загружается форма Редактирования, на ней как и на первой форме находятся поля со списками таким же образом загружаются. Изменив запись и нажав кнопку Сохранить выполняется следующая процедура:

procedure Tform25. Button1Click (Sender: Tobject);

begin.

if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') then.

ShowMessage (`Заполните пустые поля').

else begin.

Form5.ADOQuery1.Edit;

Form5.ADOQuery1.FieldValues[`MarkaTov']: =Edit1.Text;

Form5.ADOQuery1.FieldValues[`Col']: =Edit2.Text;

Form5.ADOQuery1.FieldValues[`DataPost']: =Edit3.Text;

Form5.ADOQuery1.Post;

Form5.ADOQuery1.Close;

Form5.ADOQuery1.SQL.Clear;

Form5.ADOQuery1.SQL.Add ('select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, Sclad. Col, Sclad. Code, Sclad. DataPost from Tovar, Proizvodit, Post, Sclad where Tovar. Code=Sclad.NameTov and Proizvodit. Code=Sclad.Proizv and Post. Code=Sclad.Post');

Form5.ADOQuery1.Open;

ShowMessage (`Запись сохранена');

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

ComboBox2.Clear;

ComboBox3.Clear;

ComboBox1.Clear;

Close;

end;

end;

В начале процедуры проверяется условие не пустых полей и при их отсутствии выполняется запрос на изменение, то есть текущей записи присваивается значение полей и посылается в базу, изменяя их при всплывающем сообщении «Запись сохранена». При наличии пустых полей всплывает сообщение «Заполните пустые поля».

Кнопка Обновить посылает запрос на обновление. Кнопка выход — закрывает форму.

Форма Магазин имеет такой же набор компонентов, что и предыдущая форма и выполняет похожие операции.

Следующее меню Операции.

Меню Операции имеет два под меню Заявки и Продажа. Подменю Заявки открывает элементы На склад и В магазин. Элемент На складе открывает форму Заявка на склад, на этой форме находятся такие же компоненты, что и на предыдущих основных формах. Отличие только в процедуре добавления и редактирования записи.

При добавлении записи на форме Добавить заявку на склад (Рисунок 6).

Форма Добавить заявку на склад.

Рисунок 6. Форма Добавить заявку на склад.

Выбирается Подтверждение заявки Да или Нет. При выборе Да количество товара добавляется на склад, при выборе нет запись просто добавляется. То же самое происходит при редактировании записи.

В отличии заявки на склад заявка в магазин производит более сложные вычисления.

При добавлении проверяется наличие товара на складе и, если товара на складе достаточно для подтверждения заявки, количество товара вычитается со склада и добавляется в магазин.

Подменю продажа.

Подменю продажа открывает элементы Оптовая и Розничная.

Оптовая продажа отнимает количество проданного товара со склада, а розничная — количество товара из магазина.

В остальном все формы и процедуры похожи по действиям и набору компонентов, поэтому описывать одно и тоже не имеет смысла, единственное отмечу, что при продаже товара добавлять приходится одну только запись это количество товара.

Меню отчеты открывают подменю с отчетами по всем основным формам.

Форма Отчет по оптовой продаже товара.

Рисунок 7. Форма Отчет по оптовой продаже товара.

И позволяет выводить на печать посредствам этого кода:

procedure Tform1. N26Click (Sender: Tobject);

var NewF: Tform31;

begin.

ADOquery1.Close;

ADOquery1.SQL.Clear;

ADOQuery1.SQL.add (`select Tovar.Name, Sclad. MarkaTov, Proizvodit.Name, Post. NameFirm, ProdagaOp. Col, ProdagaOp. Code from Tovar, Proizvodit, Post, ProdagaOp, Sclad `);

ADOQuery1.SQL.Add (`where Tovar. Code=ProdagaOp.NameTov and Proizvodit. Code=ProdagaOp.Proizv and Post. Code=ProdagaOp.Post and Sclad. Code=ProdagaOp.MarkTov');

ADOQuery1.Open;

NewF:=Tform31.Create (application);

NewF.QuickRep1.Preview;

end;

В этой процедуре загружается запрос и переменной NewF присваивается тип Tform31 и создается форма с отчетом и включается режим просмотра отчета. Все остальные отчеты похожи между собой и отличаются только по набору данных.

Показать весь текст
Заполнить форму текущей работой