powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Срочно
4 сообщений из 4, страница 1 из 1
Срочно
    #32433423
RomanitoDL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здраствуйте, имеется такая проблема:
Сервак Interbase7, клиент пишу на Delphi6...
Вобчем есть таблица, под неё написан тригер перед вставкой
В клиенте написанном на Дельфях при вставке новой записи всё проходит отлично, но вот скачал обновления для IBX под 7 Ибейса, и теперь чтобы тригер срабатывал необходимо DBNavigator нажимать после вставки каждой записи на форме, раньше всё прогонялось при нажатии TAB...
В чём тут дело может в Транзакциях, как быть, что рулить? подскажите плиззз...
P.S.: Воть исходники:(насчёт 2-го тригера, первый вродь и так работает, 3 ешо не проверен)... можт чаго ешо интересного подскажите?(Я в ентом деле начинающий, 2-й месяц занимаюсь БД)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
 /* Table: MOVETELEPHONES, Owner: SYSDBA */ 

CREATE TABLE  "MOVETELEPHONES"  
(
   "MOVEID" 	SMALLINT NOT NULL,
   "MNAKL" 	INTEGER NOT NULL,
   "MTEL" 	INTEGER NOT NULL,
   "MQUAN" 	INTEGER NOT NULL,
   "MPRICE" 	DOUBLE PRECISION,
 PRIMARY KEY ( "MOVEID" )
);
ALTER TABLE  "MOVETELEPHONES"  ADD CONSTRAINT  "FK_MOVETELEPHONES"  FOREIGN KEY ( "MNAKL" ) REFERENCES NAKLS ( "NAKLID" ) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE  "MOVETELEPHONES"  ADD CONSTRAINT  "FK_MOVETELEPHONES_TEL"  FOREIGN KEY ( "MTEL" ) REFERENCES TELEPHONES ( "TELEPHONEID" ) ON UPDATE CASCADE;
SET TERM ^ ;


 /* Triggers only will work for SQL triggers */ 

CREATE TRIGGER  "BEF_INS_MOVE"  FOR  "MOVETELEPHONES"  
ACTIVE BEFORE INSERT POSITION  0 
AS
begin
   IF (NEW.MOVEID IS null) then NEW.MOVEID = GEN_ID(gen_move, 1 );
end
 ^

CREATE TRIGGER  "BEF_INS_MPRICE_MOVET"  FOR  "MOVETELEPHONES"  
ACTIVE BEFORE INSERT POSITION  1 
AS
declare variable Coeff float;
declare variable Opt double precision;
declare variable Rozn double precision;
declare variable FirmN integer;
declare variable TelID integer;
begin
select NFirm from nakls
where Nakls.naklid=new.mnakl
into :FirmN;
select FCoeff from FIRMS
where firms.firmid=:FirmN
into :Coeff;
select TOPT, TROZN, TELEPHONEID FROM TELEPHONES
WHERE telephones.telephoneid=NEW.mtel
INTO :Opt, :Rozn, :TelID;
if (new.mquan>= 10 ) then
begin
update movetelephones
set new.mprice=:Opt*:Coeff;
end else begin
update movetelephones
set new.mprice=:Rozn*:Coeff;
end
end
 ^

CREATE TRIGGER  "BEF_DEL_MOVE"  FOR  "MOVETELEPHONES"  
ACTIVE BEFORE DELETE POSITION  0 
AS
declare variable TypeN Integer;
declare variable FirmN integer;
declare variable Coeff float;
declare variable FCngDELTA double precision;
declare variable FFinDELTA double precision;
begin
 select NTYPE, NFIRM FROM nakls
 WHERE NAKLS.naklid=OLD.mnakl
 INTO :TypeN, :FirmN;
 select FCNGDELTA, FFINDELTA FROM FIRMS
 WHERE firms.firmid=:FirmN
 into :FCNGDELTA, :FFINDELTA;
 IF (:TypeN IN ( 1 ,  4 ,  5 )) THEN
 begin
  Update telephones
  SET TQUAN=TQUAN-OLD.mquan
  where TELEPHONEID=OLD.mtel;
  IF(:TypeN= 4 ) then
   UPDATE firms
   SET FCngDELTA=:FCngDELTA+OLD.mquan*OLD.MPRICE*:Coeff
   WHERE FIRMID=:FirmN;
  ELSE
   UPDATE FIRMS
   set FFINDELTA=:FFINDELTA+OLD.mquan*OLD.MPRICE*:Coeff
   WHERE FIRMID=:FirmN;
 end ELSE begin
  update TELEPHONES
  SET TQUAN=TQUAN+OLD.mquan
  WHERE TELEPHONEID=OLD.mtel;
  if (:TypeN= 4 ) then
   UPDATE FIRMS
   SET FCngDELTA=:FCngDELTA-OLD.mquan*OLD.MPRICE*:Coeff
   where FIRMID=:FirmN;
  ELSE
   UPDATE FIRMS
   SET FFinDELTA=:FFINDELTA-OLD.mquan*OLD.MPRICE*:Coeff
   where FIRMID=:FirmN;
 END
end
 ^

COMMIT WORK ^
SET TERM ;^
...
Рейтинг: 0 / 0
Срочно
    #32433428
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если все поломалось при обновлении ibx, там и ищщи проблему.
напиши в форуме по делфи, там скорее помогут.

совет, попробуй удержать поток мыслей в узде, и опиши более четко проблему
я понимаю что тяжело, у самого обычно не получается, но если получится ответ полезный дадут скорее
...
Рейтинг: 0 / 0
Срочно
    #32433806
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чё так мало кода ?
И чё за отстой DBNavigator ?

...
Рейтинг: 0 / 0
Срочно
    #32434094
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй тригер с недостатками(раз уж 3 не проверен, то и не будем смотреть на него):
1. Два первых select'а можно объединить в один.
2. update movetelephones set new.mprice=:Opt*:Coeff; так писать низя, достаточно new.mprice=:Opt*:Coeff; и тоже самое по else. Если конечно не надо обновить все записи, но если нужно все записи то update movetelephones set mprice=:Opt*:Coeff; только зачем это?
И лучше опиши все что тебе надо сделать, мож помогут написать тригеры ;-)

------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Срочно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]