powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Снова триггеры в firebird
48 сообщений из 48, показаны все 2 страниц
Снова триггеры в firebird
    #39328228
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые форумчане. Прошу Вашей помощи.
Имеется сервер firebird полторашка и IBExpert на сервере и клиентские приложения, которые работают уже более 10 лет. Возникла необходимость в написании доп. ПО. которое ловит событие добавления строки в таблицу и с этой инфой делает определенные действия. Клиент работает на C#.

В IBexpert создается триггер, вот его код:

Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR ALTER TRIGGER VISIT_EVENT FOR VISITS
ACTIVE AFTER INSERT POSITION 0
AS
begin
  POST_EVENT 'new_visit';
end



Суть триггера проста до безобразия, после добавления строки все подписанные клиенты получают уведомление.
На всякий случай кусок кода C#, который подписывается на это событие

Код: c#
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.
class Program
    {
        static void Main(string[] args)
        {

            FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
            cs.DataSource = "тут адрес сервера";
            cs.Database = "тут база";
            cs.UserID = "SYSDBA";
            cs.Password = "тут пароль";
            cs.Charset = "NONE";
            cs.Pooling = false;
            FbConnection connection = new FbConnection(cs.ToString());
            connection.Open();

            FbRemoteEvent revent = new FbRemoteEvent(connection);
            revent.AddEvents(new string[] { "new_visit","NEW_EVENT","EDIT_GATEKEY" });
            //Добавить функцию обратного вызова для Firebird событий
            revent.RemoteEventCounts += new FbRemoteEventEventHandler(EventCounts);
            revent.QueueEvents();
            Console.ReadLine();
            connection.Close();           
        }

        static void EventCounts(object sender, FbRemoteEventEventArgs args)
        {
            Console.WriteLine("Event {0} has {1} counts.", args.Name, args.Counts);
        }
    }



Собственно в чем проблема:
1. Кода клиентское приложение вставляет строку в таблицу событие не срабатывает
2. Когда я добавляю строку в эту таблицу с помощью IBExpert, и делаю подтверждение транзакции, клиентское приложение, код которого описан выше прекрасно перехватывает событие и выводит информацию об этом на консоль. Два дня маюсь, весь гугл прогуглил и ничего не нашел. Может кто поможет, с меня пиво
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328237
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kadet635!
You wrote on 17 октября 2016 г. 14:49:08:

Kadet635> после добавления строки все подписанные клиенты получают уведомление.нет.
они его получат при коммите.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328246
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, простите, может я чего то не понимаю, но разве без коммита можно сохранить данные в таблице?

Может тогда кто то подскажет как решить проблему? Приложение которое добавляет строки в эту табл. написано давно и исходников у меня нет
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328250
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятия не имею когда твой шарп соизволит коммитить данные.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328251
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, я тебя услышал
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328253
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть у кого то еще мысли?
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328260
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635,

как по твоему событие может быть поймано, если подключение для ловли этого события уже закрыто?
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328262
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635,

какие еще мысли. события рассылаются по коммиту той транзакции, где эти события произошли. аминь. До коммита никакие события из этой транзакции никому отправлены не будут.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328271
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,Почему ты решил, что оно закрыто????

Код: c#
1.
Console.ReadLine();



этот оператор блокирует закрытие подключения
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328295
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна?
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328299
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kadet635!
You wrote on 17 октября 2016 г. 15:28:57:

Kadet635> Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна?
я тыбе адын умный весч скажу, толька ты ни абыжайса (с)

вне транзакции триггеры не работают ни в одной СУБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328300
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна?
не то чтобы нужна, но без нее просто невозможно физически
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328317
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635Кода клиентское приложение вставляет строку в таблицу событие не срабатывает
значит, приложение делает коммит где-то после, например "после вставки всех нужных строк в таблицу".
Events, собственно, индицируют что действие произошло и сохранено по commit. Если транзакция завершилась по rollback, никакие события из этой транзакции никому не отправляются. А тип триггера, как уже сказали, никакого значения не имеет.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328320
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635,

берёшь трейс и смотришь когда твоё приложение стартует и завершает транзакцию. Подозреваю, что автокоммит в ADO.NET сделан через COMMIT RETAIN, что может приводить к таким приколам.

Кстати в твоём примере для воспроизведения что-то не видно метода который вставляет строку в таблицу.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328324
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, Все верно этой строки там нет. Это приложение только хочет отловить событие. А приложение которое занимается добавлением данных в эту таблицу скомпилировано в exe и исходников у меня нет, я не знаю логики его работы, но оно добавляет строки в эту таблицу и моя задача получать оповещение всякий раз, когда оно это делает
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328331
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635,

трейсом смотри что это приложение делает.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328342
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, ты имеешь в виду снифером смотреть что отправляет приложение? или я чего то не понимаю? направь на путь истинный)
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328349
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635> Есть у кого то еще мысли?

Есть.

1. Какая версия FB?
2. Для чего сабдж нужен.

Если для чего-то полезного - ну есть способ, я как-то
его уже подсказывал, но не всем его можно вручить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328351
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328356
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, Спасибо)
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328365
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, версия 1,5.
Для того чтоб поймать событие добавления строки в таблицу посещения, затем смотрю добавленную строку, вытаскиваю номер карты и средствами SerialPort записываю ключ в контроллеры СКУДа.

Можно конечно постоянно опрашивать таблицу, но это идиотизм
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328372
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавь в таблицу поле.
навесь на него генератор (в триггере).
запоминай "предыдущее" значение генератора и тащи к себе всё что "новее".

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328378
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Эээ. Может, не надо?
Пусть уж лучше сразу номера вставленных карт в новую таблицу - журнал пишет. И оттуда обработанные грохает.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328383
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Wildsery!
You wrote on 17 октября 2016 г. 16:40:03:

Wildsery> Пусть уж лучше сразу номера вставленных карт в новую таблицу - журнал пишет.
> И оттуда обработанные грохает.не знаю как пацаны, но я лично не возражаю... (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328384
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635> записываю ключ в контроллеры СКУДа.

Хорошо, что я уточнил.
Вот в таком случае нельзя
гранату в руки давать. :)

> Можно конечно постоянно опрашивать таблицу, но это идиотизм

Ну смотря что и как реализовывать и какая периодичность нужна.
Про генераторы уже подсказали, про отдельную таблицу-журнал
тоже сказали (грохать из неё необязательно, кстати). Есть ещё
внешние таблицы и ещё пара вариантов. Выбирай на любой вкус.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328385
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635> версия 1,5.

А, сорри, в версии 1.5 вариантов мало. Юзай генератор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328388
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложение мое висело себе в открытом состоянии, пока я занимался своими делами, его я не трогал ровно как и базу вместе с триггерами, будь они...... и о чудо - в 16:05 события начали сыпаться! Я НИЧЕГО не делал!

Может кто то объяснить природу данного явления???
Соединение с базой всё это время было, т.к. иначе приложение бы закрылось по исключению, которые я не обработал в коде.

ЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда, он уверенно сказал, что коммит делается после каждого запроса.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328389
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамгрохать из неё необязательно, кстати
Некстати. Обязательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328393
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635Можно конечно постоянно опрашивать таблицу, но это идиотизм
если коммита нет, никакие новые записи в таблице не увидишь. А если видишь, значит коммит есть.
kadet635Может кто то объяснить природу данного явления???
в приложении произошел коммит.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328396
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, Это замечательно, но реализовано. Вопрос мой был в другом- почему триггер не отдает event.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328401
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635Вопрос мой был в другом- почему триггер не отдает event.

Триггер event отдаёт, однозначно. Почему твоё приложение его не ловит - вопрос к твоему
приложению и (в частности) используемой им кривой прослойке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328402
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvkadet635Можно конечно постоянно опрашивать таблицу, но это идиотизм
если коммита нет, никакие новые записи в таблице не увидишь. А если видишь, значит коммит есть.
kadet635Может кто то объяснить природу данного явления???
в приложении произошел коммит.

А где он был всю вчерашнюю ночь и сегодня до 16.
авторЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда, он уверенно сказал, что коммит делается после каждого запроса.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328403
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovkadet635Вопрос мой был в другом- почему триггер не отдает event.

Триггер event отдаёт, однозначно. Почему твоё приложение его не ловит - вопрос к твоему
приложению и (в частности) используемой им кривой прослойке.


Выше я писал, что когда через IBexpert добавлял строку и руками делал коммит, мое приложение ловило event
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328407
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kadet635!
You wrote on 17 октября 2016 г. 16:57:02:

Kadet635ЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда,
он уверенно сказал, что коммит делается после каждого запроса.все пациенты врут (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328409
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635А где он был всю вчерашнюю ночь и сегодня до 16.
х.з. можно было бы посмотреть общение приложения с сервером через FBScanner, раз используется ФБ 1.5.
Но чисто теоретически, что могло бы быть - эвенты блокировались или каким-то софтом на компе сервера или клиента, или установлен старый сервер и клиент.
Чтобы проверить, можно в пустой (или той) базе создать процедуру с post_event, подергать ее с commit, и посмотреть, так же приходят события, или сразу по коммиту. Если по коммиту, значит в приложении коммит делается как-то не так, или "не тогда, когда надо".
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328411
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё нужно глянуть количество событий пришедших в пакете
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328424
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvkadet635А где он был всю вчерашнюю ночь и сегодня до 16.
х.з. можно было бы посмотреть общение приложения с сервером через FBScanner, раз используется ФБ 1.5.
Но чисто теоретически, что могло бы быть - эвенты блокировались или каким-то софтом на компе сервера или клиента, или установлен старый сервер и клиент.
Чтобы проверить, можно в пустой (или той) базе создать процедуру с post_event, подергать ее с commit, и посмотреть, так же приходят события, или сразу по коммиту. Если по коммиту, значит в приложении коммит делается как-то не так, или "не тогда, когда надо".

Я тоже думал что чем то блокируются, но потом подумал что
авторВыше я писал, что когда через IBexpert добавлял строку и руками делал коммит, мое приложение ловило event
Получается действительно не коммитились транзакции, раз когда руками коммитил, все ок было... только почему? Слышал что то про зависшие транзакции...

Мимопроходящий Hello, Kadet635!
You wrote on 17 октября 2016 г. 16:57:02:

Kadet635
ЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда,
он уверенно сказал, что коммит делается после каждого запроса.
все пациенты врут (с)


нет повода ему не доверять т.к. сейчас евенты падают сразу, соответственно коммит происходит сразу.
Если только разраб после моего письма не доработал программу, сделав там коммиты, затем подобрал брутом логин и пас по rdp к моему компу и не подменил исполняемый файл программы)


А так всем тем, кто писал по существу, а не зашел поржать, человеческое спасибо))) Кто в Питере пишите с меня пиво)
В дальнейшем обсуждении не вижу смысла, т.к. сейчас проблемы нет, если появится, то по совету уважаемого kdv буду использовать FBScanner.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328427
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я честно говоря не помню, что там с кешем метаданных при создании триггера "на лету" и активных коннектах на классике.
проверять лень.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328435
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635Слышал что то про зависшие транзакции...

забудь про это. limbo никакого отношения к твоему случаю не имеет и существуют только для 2PC транзакций.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328439
kadet635
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисkadet635Слышал что то про зависшие транзакции...

забудь про это. limbo никакого отношения к твоему случаю не имеет и существуют только для 2PC транзакций.

Понял, может у тебя тогда есть какие то предположения на этот счет?
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328444
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635,

я написал про COMMIT RETAIN. Надо смотреть FBScanner что там реально происходит.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328447
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kadet635есть какие то предположения на этот счет?
19791590
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39328471
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам(грохать из неё необязательно, кстати)Если не грохать, будет та же лажа при многопользовательской вставке, что и с полем-генератором.
А именно, вставка более ранних значений позже, чем уже считанные.
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39330603
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийHello, Kadet635!
You wrote on 17 октября 2016 г. 15:28:57:

Kadet635> Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна?
я тыбе адын умный весч скажу, толька ты ни абыжайса (с)

вне транзакции триггеры не работают ни в одной СУБД.

а я щас топор ему дам, ногу себе оттяпать!

....но бывают блоки кода работающие in autonomous transaction
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39330609
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя... не в 1.5 наверное
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39330610
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Arioch!
You wrote on 20 октября 2016 г. 13:43:42:

Arioch> /а я щас топор ему дам/да чо уж там, кидай сразу гранату

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39330630
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

а вот не работают на гейте fidolook-markup
...
Рейтинг: 0 / 0
Снова триггеры в firebird
    #39330635
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийArioch> /а я щас топор ему дам/да чо уж там, кидай сразу гранату

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


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