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

English home work / ibase

.pdf
Скачиваний:
29
Добавлен:
12.02.2015
Размер:
653.01 Кб
Скачать

www.vr-online.ru

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

ShowMessage('Неправильный пароль!');

end;

Теперь чайник, а именно такие чаще всего встречаются в жизни, не сможет залезть в базу продаж! Это радует! Теперь можно спокойно отойти на кухню, налить пивка!

В событие OnClose MainForm пишем:

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin

{Если выходим из программы и база продаж открыта, то закрыть ее}

if IBQuery1.Active then IBQuery1.Close;

end;

Кодируем продажу товара! Кидаем на форму MainForm компонет IBQuery, задаем свойство DatabaseName, в свойство SQL пишем запрос:

insert into SALE (FIRMKOD, TOVARKOD, REM) VALUES (:FIRMKOD,:TOVARKOD,:REM);

Задаем свойство Params, первые два параметры типа ftInteger, со значением по умолчанию 0. Третий параметр ftString, значение “ВВВ”.

Для кнопки Продать пишем:

FormSale:=TFormSale.Create(self);

FormSale.ShowModal;

Создаем форму, называем ее FormSale, сохраняем под именем USale. Расположи на ней компоненты, как у меня (рис.23.):

www.vr-online.ru

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

Рис.23.

Выбираем Project\Option, отменяем автоматическое создание формы.

Для кнопки с тремя точками, расположенной напротив слова “Фирма”, пишем:

FormFirm:=TFormFirm.Create(self);

FormFirm.IBQuery1.Open;

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

FormFirm.Button1.Enabled:=True;

FormFirm.ShowModal;

Выбираем форму FormFirm и для кнопки Выбрать пишем:

procedure TFormFirm.Button1Click(Sender: TObject); begin

{Запоминаем название организации и его код, код пишем в свойство Tag}

FormSale.Edit1.Text:=IBQuery1NAME.Value;

FormSale.Edit1.Tag:=IBQuery1FIRMID.Value;

FormFirm.Close;

end;

Выбираем форму FirmSale. Для кнопки с тремя точками, расположенной напротив слова “Товар”, пишем:

FormTovar:=TFormTovar.Create(self);

FormTovar.IBQuery1.Open;

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

FormTovar.Button1.Enabled:=True;

FormTovar.ShowModal;

Выбираем форму FormFirm и для кнопки Выбрать пишем!

procedure TFormTovar.Button2Click(Sender: TObject); begin

{Запоминаем название товара и его код, код пишем в свойство Tag}

www.vr-online.ru

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

FormSale.Edit2.Text:=IBQuery1NAME.Value;

FormSale.Edit2.Tag:=IBQuery1TOVARID.Value;

FormTovar.Close;

end;

Идем на форму FormSale, для кнопки “Закрыть” пишем: FormSale.Close;

Для кнопки “Продать” пишем:

procedure TFormSale.Button3Click(Sender: TObject); begin

{Передаем в параметры данные по продаже} MainForm.IBQuery2.Params.ParamByName('FIRMKOD').Value:=Edit1.Tag; MainForm.IBQuery2.Params.ParamByName('TOVARKOD').Value:=Edit2.Tag; MainForm.IBQuery2.Params.ParamByName('REM').Value:=Edit3.Text;

{пытаемся выполнить запрос} try MainForm.IBQuery2.ExecSQL;

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

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

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

DM.IBTransaction1.RollbackRetaining;

exit;

end;

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

DM.IBTransaction1.CommitRetaining;

{обновляем таблицу продаж, если она открыта} if MainForm.IBQuery1.Active then

begin MainForm.IBQuery1.Close; MainForm.IBQuery1.Open; end;

FormSale.Close;

end;

Пишем обработчик для кнопки «Закрыть» формы MainForm: MainForm.Close;

www.vr-online.ru

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

Теперь щелкаем два раза на компоненте IBQuery1, расположенном на главной форме, добавляем все поля, и оставляем видимыми только те, что нужно нам: Rem, Name, Name1, Price, можно менять их очередность, перетаскивая поля мышкой. Задаем им русский текст в свойство DisplayLabel.

Все проект готов! Юзайте на здоровье! Нам осталось рассмотреть лишь несколько мелочей!

Выбери форму UDM (это наш DataModule), щелкни правой кнопкой мыши по компоненту IBDatabase1 и выбери пункт Database Editor, появится окошко (рис.24.):

Рис.24.

Для Character Set в выпадающем списке обязательно выбери WIN1251, без этого мы не сможим добавить в базу данные, содержащие русский текст.

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

Для этого сделай активной форму MainForm, нажми <F12>, и перед разделом VAR объяви процедуру OpenBD.

{Процедура открытия базы}

www.vr-online.ru

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

procedure OpenBD;

var

MainForm: TMainForm;

Текст самой процедуры: procedure OpenBD;

var FP:TextFile;

StringPath:string;

NameOfFile:string; begin

{получаем путь к файлу path.txt, там у нас будут храниться адрес б.д.}

NameOfFile:=ExtractFileDir(Application.ExeName)+'\path.txt';

{Если файл есть, то связываемся с ним, иначе сообщаем об ошибке и выходим из программы} if FileExists(NameOfFile) then

begin Assign(Fp,NameOfFile); try

begin Reset(FP);

Read(FP,StringPath);

end; finally

CloseFile(FP);

end; end else begin

ShowMessage('Файл пути к б.д. не найде'+ #13+

www.vr-online.ru

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

'Создайте в папке программы файл path.txt'+ #13+ 'и запишите туда путь к б.д.'+ #13+

'Пример: C:\WorkIB\ WorkIB.GDB); Application.Terminate;

end;

{задаем базу данных для компонента IBDatabase}

DM.IBDatabase1.DatabaseName:=StringPath;

{Открываем базу данных, и компонент для работы с транзакциями б.д.}

with DM do begin

IBDatabase1.Connected:=True;

IBTransaction1.Active:=True;

end;

end;

Теперь для DM – модуля данных пишем в событие OnCreate:

procedure TDM.DataModuleCreate(Sender: TObject); begin

OpenBD;

end;

Только не забудьте подключить модуль UMain

Теперь в нашей рабочей папке, у меня это C:\WorkIB создадим текстовый файл (можно с помощью блокнота) path.txt. И там прописываем путь к базе, например:

C:\WorkIB\WorkIB.gdb – это если база лежить локально Имя_сервера:имя_файла_БД – это работа с удаленной базой (Имя сервера может быть

символьным, либо можно ввести его IP адрес).

И еще один момент, когда мы выполняем транзакции мы никогда не пишем

IBTransaction1.StartTransaction, мы либо потверждаем их, либо откатываем.

Это не ошибка, просто транзакции у нас стартуют автоматически, за это и отвечает компонент IBTransaction.

www.vr-online.ru

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

Ну вот и все, удачи. Будут вопросы пиши!

Copyright Шкрыль Андрей aka LittleBudda e-mail: LittleBudda@rambler.ru

Соседние файлы в папке English home work