Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
12.02.2015
Размер:
653.01 Кб
Скачать

www.vr-online.ru

© Шкрыль Андрей

DM.IBTransaction1.RollbackRetaining;

exit;

end;

{Если запрос выполнился, то потверждаем транзакцию}

DM.IBTransaction1.CommitRetaining;

{Обновляем набор данных, можно и Refresh но мне так больше нравится и работает это корректней}

IBQuery1.Close;

IBQuery1.Open;

end;

Кидаем на форму компонет еще один компонент IBQuery, свойство

DATABASENAME DM.IBDATABASE1.

В свойстве SQL IBQuery3 пишем:

Delete from Tovar where TovarID=:Par1

Это означает – удалить из таблицы товаров товар с кодом равным значению параметра.

Щелкаем по свойству Params компонента IBQuery3, появляется окошко

Выделяем запись Par1 и в инспекторе объектов правим свойство DataType на ftInteger, в свойстве Value пишем значение по умолчанию 0.

Кидаем на форму еще одну кнопку, в Caption пишем “–“ В событие OnClick, пишем:

procedure TFormTovar.Button4Click(Sender: TObject); begin

{Спрашиваем юзера, правда ли он хочет удалить запись} if MessageDlg('Вы уверены, что хотите удалить запись',

mtConfirmation,[mbYes,mbNo],0)=mrYes then

{если да, то}

www.vr-online.ru

© Шкрыль Андрей

begin

{запоминаем код выбранной записи, и помещаем это значение в параметр Par1}

IBQuery3.Params.ParamByName('Par1').Value:= IBQuery1TOVARID.Value;

{Пытаемся удалить запись} try

IBQuery3.ExecSQL;

{если не получилось, то сообщаем об этом юзеру} except

ShowMessage('Удаление не прошло!'+#13+ 'Запись заблокировано, либо уже удалена!');

{откатывем транзакцию}

DM.IBTransaction1.RollbackRetaining;

exit;

end;

{Если все нормалек, то потверждаем транзакцию}

DM.IBTransaction1.CommitRetaining;

{Обновляем набор данных}

IBQuery1.Close;

IBQuery1.Open;

end;

end;

На рис.18. представлен окончательный вариант справочника товары.

www.vr-online.ru

© Шкрыль Андрей

Рис.18.

Вуаля! Один справочник закончили, фу! Теперь можно сделать пару глотков пивка, или сходить поганять чайку!

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

Итак, идем дальше!

www.vr-online.ru

© Шкрыль Андрей

Создаем новую форму, называем ее FormFirm. В свойство Caption пишем - Справочник – фирмы. Сохраняем под именем UFirm

Кидаем компоненты DBGrid, DBNavigator, Button – 2 штуки, IBQuery, DataSource (рис.19.).

Рис.19.

Свойство Enabled кнопки «Выбрать», установи в False.

Для компонента DBNavigator, свойство VisibleButtons сделай такими же, как первый раз.

В Cвойство DataSet, компонента DataSource устанавливаем IBQuery1. В Свойство

DataSource компонентов DBGrid и DBNavigator ставим DataSource1.

Выбираем пункт меню File\USE Unit, рис.20.

www.vr-online.ru

© Шкрыль Андрей

Рис.20.

Выбираем UDM и жмем ОК. Это нужно чтоб мы смогли подключить компонент

IBQuery1 к компоненту IBDatabase.

В свойстве Database компонента IBQuery1 ставим:

Теперь заходим в свойство SQL этого же компонента

И пишем в окне Command Text Editor следующий запрос:

select * from Firm order by Name

Если перевести на русский язык, то это будет означать:

Выбрать все данные из таблицы Фирмы, и отсортировать по названию фирмы!

Щелкаем два раза по компонету IBQuery1. Щелкаем правой кнопкой мыши по появившемуся окошку и выбираем AddAllFields. После этого настроим отображение полей:

www.vr-online.ru

© Шкрыль Андрей

Выбираем FIRMID и в инспекторе объектов, свойство Visible ставим в False. Теперь это поле не будет отображаться на экране, во время работы с программой.

Для Name в свойство DisplayLabel пишем “Название фирмы”. В свойство DisplayWidth ставим 30 – это свойство отвечает за ширину поля в DBGRid.

Щелкаем два раза на кнопке Закрыть и пишем код: FormFirm.Close.

Выбираем пункт меню Project\Option . И помощью стрелочек переносит FormFirm в правую половину окна, таким образом мы говорим Delphi что во время работы программы мы будет сами следить за созданием этой формы и ее удалением.

Жмем оК!

Делаем активной MainForm и для пункта меню Справочники\Фирмы пишем код! Но предварительно нам надо подключить модуль FormFirmTovar, это делается с помощью пункта меню File\USE UNIT.

FormFirm:=TFormFirm.Create(self);

FormFirm.IBQuery1.Open;

FormFirm.ShowModal;

Идем на форму FormFirm в событии OnClose пишем: FormFirm.IBQuery1.Close; {Закрыть набор данных, если закрывают справочник}

Кидаем на форму компонет IBQuery, свойство DATABASENAME DM.IBDATABASE1. В свойстве SQL IBQuery2 пишем:

insert into Firm (Name) VALUES (:NAME);

www.vr-online.ru

© Шкрыль Андрей

Это означает вставить новую запись в таблицу Firm со значением взятым из параметра

Name.

Щелакаем по свойству Params компонента IBQuery2, в появившемся окошке. Выделяем запись Name и в инспекторе объектов правим свойство DataType на ftString,

в свойстве Value пишем значение по умолчанию «БББ».

Кидаем на форму еще одну кнопку, в Caption пишем “+”. В событие OnClick этой кнопки пишем:

procedure TFormFirm.Button3Click(Sender: TObject); var

s:string; begin

{Запрашиваем у пользователя данные}

s:=InputBox('Введите данные','Введите название организации','');

{Передаем введенное название в параметр}

IBQuery2.Params.ParamByName('Name').Value:=s;

{пытаемся выполнить запрос} try

IBQuery2.ExecSQL;

{если не удалось, то сообщаем об ошибке} except

ShowMessage('Добавление не получилось!'+#13+ 'Повторите попытку');

{откатываем транзакцию}

DM.IBTransaction1.RollbackRetaining;

exit;

end;

{если запрос выполнился, то потверждаем транзакцию}

DM.IBTransaction1.CommitRetaining;

{обновляем набор данных}

IBQuery1.Close;

IBQuery1.Open;

end;

Кидаем на форму еще один компонет IBQuery, свойство DATABASENAME - DM.IBDATABASE1.

В свойстве SQL IBQuery3 пишем: Delete from Firm

www.vr-online.ru

© Шкрыль Андрей

where FirmID=:Par1

Это означает - а впрочем, ты уже должен знать, что это означает, если не знаешь, то назад, назад, назад, читай все сначала!

Щелакаем по свойству Params компонента IBQuery3, в появившемся окошке выделяем запись Par1 и в инспекторе объектов правим свойство DataType на ftInteger, в свойстве Value пишем значение по умолчанию 0.

Кидаем на форму еще одну кнопку, в Caption пишем “-“. В событие OnClick, пишем:

procedure TFormFirm.Button4Click(Sender: TObject); begin

{Спрашиваем юзера, правда ли он хочет удалить запись} if MessageDlg('Вы уверены, что хотите удалить запись',

mtConfirmation,[mbYes,mbNo],0)=mrYes then

{если да, то} begin

{запоминаем код выбранной записи, и помещаем это значение в параметр Par1}

IBQuery3.Params.ParamByName('Par1').Value:= IBQuery1FIRMID.Value;

{Пытаемся удалить запись} try

IBQuery3.ExecSQL;

{если не получилось и не срослось, то сообщаем об этом юзеру} except

ShowMessage('Удаление не прошло!'+#13+ 'Запись заблокировано, либо уже удалена!');

{откатывем транзакцию}

DM.IBTransaction1.RollbackRetaining;

exit;

end;

{Если все нормалек, то потверждаем транзакцию}

DM.IBTransaction1.CommitRetaining;

{Обновляем набор данных}

IBQuery1.Close;

IBQuery1.Open;

end;

end;

На рис.21. представлен окончательный вариант справочника организации.

www.vr-online.ru

© Шкрыль Андрей

Рис.21.

Вуаля! Наш последний справочник завершен.

Теперь перейдем к самому интересному. Будем кодить процесс продажи товара.

Переходим на главную форму MainForm, кидаем компоненты DBGrid, IBQuery, DataSource, три Button (рис.22).

Рис.22.

www.vr-online.ru

© Шкрыль Андрей

У кнопок в свойство Caption пишем “Открыть базу”, “Продать”, “Закрыть”. Выбираем пункт меню File\USE Unit. Выбираем UDM и жмем ОК

В свойстве Database компонента IBQuery1 ставим:

Теперь заходим в свойство SQL этого же компонента

И пишем в окне Command Text Editor следующий запрос:

select * from Sale,Tovar,Firm where

Sale.FIRMKOD=FIRM.FIRMID and

Sale.TOVARKOD=TOVAR.TOVARID

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

Свойство DataSet, компонента DataSource устанавливаем в IBQuery1. А свойство

DataSource компонента DBGrid устанавливаем в DataSource1

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

procedure TMainForm.Button1Click(Sender: TObject); var

s:string; begin

{спрашиваем пароль входа} s:=InputBox('Аутентификация','Введите пароль:','');

{если пароль правильный, то} if s='Parol' then

begin

{открываем базу продаж}

IBQuery1.Open;

{кнопку "Открыть базу" делаем недоступной}

Button1.Enabled:=false; end

else {если пароль не правильный, то ругаемся}

Соседние файлы в папке D