powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер не срабатывает!
6 сообщений из 6, страница 1 из 1
Триггер не срабатывает!
    #32283848
Али
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все делаю по учебнику, а не работает!

По ODBC из внешней программы нужно непрерывно плучать данные. ODBC - EasySoft для IB7.

Написал скрипт - Создал базу, создал таблицу с ПК, создал генератор, создал триггер (before insert) без проверки на ноль, просто NEW.ПК=GEN_ID(...). Скрипт выполняется их IBExplorera без ошибок.

Ну так не работает эта автоинкрементная конструкция, хоть убейся! Помогите, что может быть не так?

Может в настройках ODBC что? Но как в учебнике и language reference для IB не работает!
...
Рейтинг: 0 / 0
Триггер не срабатывает!
    #32283850
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Али писал:По ODBC из внешней программы нужно непрерывно плучать данные.

ты хочешь получать данные из базы по ОДБЦ?

опиши что тебе надо еще подробней. че-то мне кажется, что ты хочешь по ОДБЦ получать увеличивающиеся значения.

триггер срабатывает только когда ты делаешь инсерт. у тебя не срабатывает триггер, когда ты вставляешь данные в таблицу по одбц??
...
Рейтинг: 0 / 0
Триггер не срабатывает!
    #32283973
Али
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация следующая:

Данные поставляет внешняя прг. В настройках: передать по ОДБЦ, и устанавливается соответствие полей на источнике и в базе.

У себя я сотворил такую конструкцию:

/*Создание оперативной базы для работы с Квиком*/
/*Создаем базу на Х*/

set sql dialect 3;
set names win1251;

create database 'Chaos:h:\oper_mod.ib'
user 'sysdba' password 'masterkey'
page_size 4096
default character set win1251;

connect database 'Chaos:h:\oper_mod.ib'
user 'sysdba' password 'masterkey'
page_size 4096
default character set win1251;

create TABLE INQUIK (
NUMECO INTEGER NOT NULL CONSTRAINT PK_INQUIK PRIMARY KEY,
INSTRUMENT VARCHAR(150),
TIME_TR VARCHAR(15),
...
...
...
LAST DECIMAL(15,6),
CHANGE DECIMAL(15,6)
);

create generator gen_inquik_numeco;

create trigger inquik_bi for inquik
active before insert position 0
as begin
/* IF (NEW.NUMECO IS NULL) THEN */
new.numeco = gen_id(gen_inquik_numeco,1);
end

Вот это приблизительно, что в скрипте. Когда его выполняешь в ИБЭкспресс все вроде нормально. Я хотел сделать конструкцию для накопления данных в течение дня, т.е. кол-во записей должно постоянно увеличиваться, но не тут-то было.
Когда подключаюсь по ОДБЦ в первую строку данные перезаписываются, генератор не генерит, а не генерит он видать из-за несрабатывания триггера.
Пробовал ставить АПДАТЕ в триггер, вооще не работает.

Так что помоги если можешь! Я с базами новичок
...
Рейтинг: 0 / 0
Триггер не срабатывает!
    #32283975
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помогу завтра а то уже не соображаю.

а ты пока напиши, в результате какой команды у тебя перезаписывается первая строка, когда ты через одбс.

типа insert into INQUIK ( список полей ) values ( там что-нибуть )

и как ты определяешь что оно перезаписалось. потому что инсерт не перезаписывает, а вставляет новое, перезаписывает апдейт... ну посмотрим
...
Рейтинг: 0 / 0
Триггер не срабатывает!
    #32283977
Али
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно до завтра.

Что касаемо вопроса, то по косвенным данным (документация, сообщения об ошибках) можно предположить, что действительно в прг-поставщике данных работает INSERT INTO. Но!!!! На моей стороне количество записей не увеличивается (я так думаю, потому как данные в строке меняются, а ПК (NUMECO) для этой же строки не меняется). Наблюдаю я это в IBExplorere. Никакими языками и инструментами больше не пользуюсь.

Спасибо!
...
Рейтинг: 0 / 0
Триггер не срабатывает!
    #32284088
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит эта программа делает update, раз все меняется, кроме ПК
Али писал:Я хотел сделать конструкцию для накопления данных в течение дня, т.е. кол-во записей должно постоянно увеличиваться, но не тут-то было.

кажется я понимаю что тебе нужно.

сделай так:

создай копию таблицы, в которой эта программа делает апдейт

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create TABLE INQUIK_ACCUM ( 
NUMECO INTEGER NOT NULL CONSTRAINT PK_INQUIK PRIMARY KEY, 
INSTRUMENT VARCHAR( 150 ), 
TIME_TR VARCHAR( 15 ), 
... 
... 
... 
LAST DECIMAL( 15 , 6 ), 
CHANGE DECIMAL( 15 , 6 ) 
); 


генератор сделай для новой таблицы, и триггер, чтобы генерировал новый numeco

Код: plaintext
1.
2.
3.
4.
5.
create trigger inquik_accum_bi for inquik_accum 
active before insert position  0  
as begin 
  IF (NEW.NUMECO IS NULL) THEN
    new.numeco = gen_id(gen_inquik_numeco, 1 ); 
end 


а в ту таблицу добавь триггер on update, типа так

Код: plaintext
1.
2.
3.
4.
create trigger inquik_au for inquik 
active after update position  0  
as begin 
  insert into inquik_accum (numeco, другие поля) values (null[ну чтобы новй ключ сделался], new.тратата)
end 



тоесть при апдейте в новой таблице будет накапливатся история

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


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