CREATE TABLE tovary1 ( KODTOV SMALLINT NOT NULL, NAZVAN CHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL, PRIMARY KEY (KODTOV) ) CREATE TABLE postavki ( KODTOV SMALLINT NOT NULL, KODPOSTAVSC SMALLINT NOT NULL, CENA FLOAT NOT NULL, KOL_VO FLOAT NOT NULL ) CREATE TABLE postavsc ( KODPOSTAVSC SMALLINT NOT NULL, NAZVPOSTAVSC CHAR(20) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL, PRIMARY KEY (KODPOSTAVSC) )Вторичный ключ, который вроде бы нужен:
Первая запись Предыдущая запись Следующая запись Последняя запись Вставить запись Удалить запись Править запись Сохранить изменения Отменить изменения Обновить данные из БДи установить ShowHints = true; Добавим обработку события DBNavigator1.DataSource.onDataChange - чтобы после изменения табл Товары сразу же просмотреть таблицу Поставки и увидеть там изменения (вызванные действием триггеров).
procedure TfrmTovar.DataSource1DataChange(Sender: TObject; Field: TField); begin IBTable2.Active:= false; IBTable2.Active:= true; end;
SET TERM ^ ; CREATE PROCEDURE “GET_KODPOSTAVSC” RETURNS (OP INTEGER) AS BEGIN OP = GEN_ID(POSTAVSC_KODPOSTAVSC,1); END ^ COMMIT WORK ^ SET TERM ;^Здесь мы вынуждены временно заменить символ-ограничитель ; на ^ , так как в процедуре
INSERT INTO POSTAVSC (kodpostavsc, nazvpostavsc) VALUES (:MKODPOST, :MNamePOST)После этого откроем свойство IBQuery1.Params. В редакторе увидим параметры: MKODPOST, MNamePOST. Установим для них типы данных - DataType = ftInteger, ftString (соответственно)
SET TERM ^ ; CREATE TRIGGER BU_TOVARY FOR TOVARY1 ACTIVE BEFORE UPDATE AS BEGIN IF(OLD.KODTOV <> NEW.KODTOV) THEN UPDATE POSTAVKI SET KODTOV = NEW.KODTOV WHERE KODTOV = OLD.KODTOV; END ^ COMMIT WORK ^ SET TERM ;^
SET TERM ^ ; CREATE TRIGGER DEL_TOVARY FOR TOVARY1 ACTIVE AFTER DELETE AS BEGIN DELETE FROM POSTAVKI WHERE POSTAVKI.KODTOV = TOVARY1.KODTOV; END ^ COMMIT WORK ^ SET TERM ;^
procedure TfrmTovar.btnCommitClick(Sender: TObject); begin IBTransaction1.CommitRetaining; end;