English home work / ibase
.pdfwww.vr-online.ru |
© Шкрыль Андрей |
Выбирая в дереве, окна IBCONSOLE – справа GENERATOR можно посмотреть параметры созданного генератора. А созданный триггер можно посмотреть выбирая в окне IBCONSOLE - TABLE\TOVAR, щелкая два раза и выбирая закладки
DEPENDENCIES. Вы увидите окошко (рис.8.):
Рис.8.
Если выберите закладку METADATA, то увидите текст SQL, который описывает структуру вашей таблицы.
Нам осталось создать еще две таблицы – Организации и Продажи. Запускай
INTERACTIVE SQL, кнопка .
Для создания справочника организации, пишем запрос:
CREATE TABLE "FIRM"
(
"FIRMID" INTEGER NOT NULL,
"NAME" VARCHAR(100) CHARACTER SET WIN1251 NOT NULL,
PRIMARY KEY ("FIRMID") );
Выполняем запрос.
Если тебе что-то не понятно в запросе, то советую вернуться на начало и почитать еще разок.
Создаем генератор для таблицы – пишем в том же INTERACTIVE SQL
CREATE GENERATOR GEN_FIRM
Устанавливаем начальное значение для генератора
www.vr-online.ru |
© Шкрыль Андрей |
SET GENERATOR GEN_FIRM TO 1
Привязываем генератор к таблице FIRM:
SET TERM !! ;
CREATE TRIGGER "BEF_INS_FIRM" FOR "FIRM"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.FIRMID=GEN_ID(GEN_FIRM,1);
END!!
SET TERM ; !!
SET TERM ^ ;
Теперь создаем таблицу Продажи и соответственно генератор для нее:
CREATE TABLE "SALE"
(
"SALEID" INTEGER NOT NULL,
"FIRMKOD" |
INTEGER NOT NULL, |
"TOVARKOD" |
INTEGER NOT NULL, |
"REM" |
VARCHAR(100) CHARACTER SET WIN1251, |
PRIMARY KEY ("SALEID") );
Создаем генератор для таблицы
CREATE GENERATOR GEN_SALE
Устанавливаем начальное значение для генератора
SET GENERATOR GEN_SALE TO 1
Привязываем генератор к таблице SALE:
SET TERM !! ;
CREATE TRIGGER "BEF_INS_SALE" FOR "SALE"
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.SALEID=GEN_ID(GEN_SALE,1);
END!!
SET TERM ; !!
SET TERM ^ ;
Все база создана, теперь можно смело закрывать INTERBASE.
www.vr-online.ru |
© Шкрыль Андрей |
Коддинг приложения Клиент Сервер
Запускаем Delphi. Создаем новое Приложение. Свойство Name формы меняем на MainForm. Жмем кнопку сохранить все! Выбираем нашу рабочую папку, у меня это
C:\WorkIB.
Модуль сохраняем под именем UMain. Приложение под именем WorkIB.
Выбираем пункт меню Project\Options, заходим на вкладку Application. В окно редактирования Title вводим Учет продаж.
Создаем новый DataModule, File\New\DataModule. Называем его DM. Жмем сохранить, и называем модуль UDM.
Кидаем на DataModule компоненты IBDatabase1 и IBTransaction1 с вкладки InterBase. (рис.9.).
IBDatabase1 – отвечает за связь с базой данных.
IBTransaction – отвечает за работу всех транзакций для связанной с ним базой данных.
Поэтому в DefaultDatabase, компонента IBTransaction устанавливаем IBDatabase1.
Напомню что транзакции предназначены для корректного изменения данных в базе. Транзакции можно начинать, потверждать и отменять (откатывать)
Рис.9.
Для компонента IBDatabase1 устанавливаем следующие свойства:
DatabaseName – устанавливаем файл нашей базы, у меня C:\WorkIB\WORKIB.GDB
В свойстве Params пишем:
USER_NAME=SYSDBA
PASSWORD=masterkey
Таким образом мы указывем, что мы хотим работать от имени админа. Свойство LoginPrompt ставим в False, что каждый раз при запуске программы не
появлялось окошко ввода имени юзера и пароля! Свойство Connect устанавливаем в True.
www.vr-online.ru |
© Шкрыль Андрей |
Кидаем на форму MainForm компонент MainMenu. Щелкаем по нему два раза и создаем пункты меню (рис.10.).
Справочники
Товар
Организации
Рис.10.
Создаем новую форму, называем ее FormTovar. В свойство Caption пишем - Справочник – товары. Сохраняем под именем UTovar
Кидаем компоненты DBGrid, DBNavigator, Button – 2 штуки, IBQuery, DataSource, (рис.11.).
www.vr-online.ru |
© Шкрыль Андрей |
Рис.11.
Свойство Enabled кнопки «Выбрать», установи в False.
Для компонента DBNavigator, свойство VisibleButtons сделай следующим (рис.12):
Рис.12.
Это мы сделали, чтобы шаловливые ручонки пользователя, не делали того чего не нужно!
ВCвойство DataSet, компонента DataSource устанавливаем IBQuery1.
ВСвойство DataSource компонентов DBGrid и DBNavigator ставим DataSource1.
www.vr-online.ru |
© Шкрыль Андрей |
Выбираем пункт меню File\USE Unit (рис.13.)
Рис.13.
Выбираем UDM и жмем ОК. Это нужно чтоб мы смогли подключить компонент
IBQuery1 к компоненту IBDatabase.
В свойстве Database компонента IBQuery1 ставим:
Теперь заходим в свойство SQL этого же компонента
И пишем в окне Command Text Editor следующий запрос (рис.14.):
www.vr-online.ru |
© Шкрыль Андрей |
Рис.14.
Если перевести на русский язык, то это будет означать:
Выбрать все данные из таблицы Товар, и отсортировать по названию товара!
Щелкаем два раза по компонету IBQuery1. Щелкаем правой кнопкой мыши по появившемуся окошку и выбираем AddAllFields (рис.15.).
(Рис.15.)
После этого действия окошко примет следующий вид (Рис.16.):
www.vr-online.ru |
© Шкрыль Андрей |
Рис.16.
Выбираем TOVARID и в инспекторе объектов, свойство Visible ставим в False. Теперь это поле не будет отображаться на экране в сетке DBGrid, во время работы с программой.
Для Name в свойство DisplayLabel пишем “Название товара”. Заметил изменения в
DBGRid?
В свойство DisplayWidth ставим 30 – это свойство отвечает за ширину поля в DBGRid.
Выбираем PRICE, свойство DisplayLabel пишем “Цена”!
Щелкаем два раза на кнопке Закрыть и пишем код: FormTovar.Close. – это означает закрыть форму.
Выбираем пункт меню Project\Option, вкладку Forms. И помощью стрелочек переносим FormTovar в правую половину окна, таким образом мы говорим Delphi, что во время работы программы, мы будет сами следить за созданием этой формы и ее удалением (рис.17).
www.vr-online.ru |
© Шкрыль Андрей |
Рис.17.
Жмем оК!
Делаем активной MainForm и для пункта меню Справочники\Товар пишем код! Но предварительно нам надо подключить модуль FormTovar, это делается с помощью пункта меню File\USE UNIT.
FormTovar:=TFormTovar.Create(self); {Создаем форму}
FormTovar.IBQuery1.Open; {Открываем набор данных}
FormTovar.ShowModal; {Отображаем форму на экране}
Идем на форму FormTovar в событии OnClose пишем: FormTovar.IBQuery1.Close; {Закрыть набор данных, если закрывают справочник}
Кидаем на форму FormTovar еще один компонет IBQuery, свойство
DATABASENAME - DM.IBDATABASE1.
В свойстве SQL IBQuery2 пишем:
insert into TOVAR (Name, PRICE) VALUES (:NAME,:PRICE);
www.vr-online.ru |
© Шкрыль Андрей |
Это означает - вставить в поля Name, Price таблицы TOVAR, значения, содержащиеся в параметрах :Name и :Price, параметры отличаются двоеточием, стоящим перед их именем.
Щелкаем по свойству Params, компонента IBQuery2, появляется окошко
Выделяем запись Name и в инспекторе объектов правим свойство DataType на ftString, в свойстве Value пишем «ААА». DataType – тип параметра, в данном случае текстовый, Value – значение по умолчанию, если параметру не присвоено программистом никакого значения, то ему будет присвоено «ААА».
Выделяем запись Price и в инспекторе объектов правим свойство DataType на ftInteger
– значение параметра целое число, в свойстве Value пишем значение по умолчанию 0.
Кидаем на форму еще одну кнопку, в Caption пишем “+”.В событие OnClick, пишем:
procedure TFormTovar.Button3Click(Sender: TObject); var
s:string;
c:integer; begin
s:=InputBox('Введите данные','Введите название товара',''); c:=StrToInt(InputBox('Введите данные','Введите цену товара',''));
{Передаем в параметр Name введеное название товара}
IBQuery2.Params.ParamByName('Name').Value:=s; {Передаем в параметр Price введеную цену товара} IBQuery2.Params.ParamByName('Price').Value:=c;
{Пытаемся выполнить запрос на вставку записи} try
IBQuery2.ExecSQL;
{Если не удалось, то сообщить пользователю} except
ShowMessage('Ошибка при добавлении данных!,'+#13+ 'Попробуйте еще раз!');
{откатываем изменение}