
English home work / ibase
.pdfwww.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