|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемые форумчане. Прошу Вашей помощи. Имеется сервер firebird полторашка и IBExpert на сервере и клиентские приложения, которые работают уже более 10 лет. Возникла необходимость в написании доп. ПО. которое ловит событие добавления строки в таблицу и с этой инфой делает определенные действия. Клиент работает на C#. В IBexpert создается триггер, вот его код: Код: sql 1. 2. 3. 4. 5. 6.
Суть триггера проста до безобразия, после добавления строки все подписанные клиенты получают уведомление. На всякий случай кусок кода 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.
Собственно в чем проблема: 1. Кода клиентское приложение вставляет строку в таблицу событие не срабатывает 2. Когда я добавляю строку в эту таблицу с помощью IBExpert, и делаю подтверждение транзакции, клиентское приложение, код которого описан выше прекрасно перехватывает событие и выводит информацию об этом на консоль. Два дня маюсь, весь гугл прогуглил и ничего не нашел. Может кто поможет, с меня пиво ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 14:43 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Hello, Kadet635! You wrote on 17 октября 2016 г. 14:49:08: Kadet635> после добавления строки все подписанные клиенты получают уведомление.нет. они его получат при коммите. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 14:49 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Мимопроходящий, простите, может я чего то не понимаю, но разве без коммита можно сохранить данные в таблице? Может тогда кто то подскажет как решить проблему? Приложение которое добавляет строки в эту табл. написано давно и исходников у меня нет ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 14:55 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
понятия не имею когда твой шарп соизволит коммитить данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 14:59 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Мимопроходящий, я тебя услышал ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:00 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Есть у кого то еще мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:00 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635, как по твоему событие может быть поймано, если подключение для ловли этого события уже закрыто? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:04 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635, какие еще мысли. события рассылаются по коммиту той транзакции, где эти события произошли. аминь. До коммита никакие события из этой транзакции никому отправлены не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:05 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Симонов Денис,Почему ты решил, что оно закрыто???? Код: c# 1.
этот оператор блокирует закрытие подключения ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:10 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:26 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Hello, Kadet635! You wrote on 17 октября 2016 г. 15:28:57: Kadet635> Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна? я тыбе адын умный весч скажу, толька ты ни абыжайса (с) вне транзакции триггеры не работают ни в одной СУБД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:30 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна? не то чтобы нужна, но без нее просто невозможно физически ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:30 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635Кода клиентское приложение вставляет строку в таблицу событие не срабатывает значит, приложение делает коммит где-то после, например "после вставки всех нужных строк в таблицу". Events, собственно, индицируют что действие произошло и сохранено по commit. Если транзакция завершилась по rollback, никакие события из этой транзакции никому не отправляются. А тип триггера, как уже сказали, никакого значения не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:43 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635, берёшь трейс и смотришь когда твоё приложение стартует и завершает транзакцию. Подозреваю, что автокоммит в ADO.NET сделан через COMMIT RETAIN, что может приводить к таким приколам. Кстати в твоём примере для воспроизведения что-то не видно метода который вставляет строку в таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:44 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Симонов Денис, Все верно этой строки там нет. Это приложение только хочет отловить событие. А приложение которое занимается добавлением данных в эту таблицу скомпилировано в exe и исходников у меня нет, я не знаю логики его работы, но оно добавляет строки в эту таблицу и моя задача получать оповещение всякий раз, когда оно это делает ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:49 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635, трейсом смотри что это приложение делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 15:53 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Симонов Денис, ты имеешь в виду снифером смотреть что отправляет приложение? или я чего то не понимаю? направь на путь истинный) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:00 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635> Есть у кого то еще мысли? Есть. 1. Какая версия FB? 2. Для чего сабдж нужен. Если для чего-то полезного - ну есть способ, я как-то его уже подсказывал, но не всем его можно вручить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:06 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Симонов Денис, Спасибо) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:08 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, версия 1,5. Для того чтоб поймать событие добавления строки в таблицу посещения, затем смотрю добавленную строку, вытаскиваю номер карты и средствами SerialPort записываю ключ в контроллеры СКУДа. Можно конечно постоянно опрашивать таблицу, но это идиотизм ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:13 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
добавь в таблицу поле. навесь на него генератор (в триггере). запоминай "предыдущее" значение генератора и тащи к себе всё что "новее". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:23 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Мимопроходящий, Эээ. Может, не надо? Пусть уж лучше сразу номера вставленных карт в новую таблицу - журнал пишет. И оттуда обработанные грохает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:35 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Hello, Wildsery! You wrote on 17 октября 2016 г. 16:40:03: Wildsery> Пусть уж лучше сразу номера вставленных карт в новую таблицу - журнал пишет. > И оттуда обработанные грохает.не знаю как пацаны, но я лично не возражаю... (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:40 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635> записываю ключ в контроллеры СКУДа. Хорошо, что я уточнил. Вот в таком случае нельзя гранату в руки давать. :) > Можно конечно постоянно опрашивать таблицу, но это идиотизм Ну смотря что и как реализовывать и какая периодичность нужна. Про генераторы уже подсказали, про отдельную таблицу-журнал тоже сказали (грохать из неё необязательно, кстати). Есть ещё внешние таблицы и ещё пара вариантов. Выбирай на любой вкус. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:43 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635> версия 1,5. А, сорри, в версии 1.5 вариантов мало. Юзай генератор. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:43 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Приложение мое висело себе в открытом состоянии, пока я занимался своими делами, его я не трогал ровно как и базу вместе с триггерами, будь они...... и о чудо - в 16:05 события начали сыпаться! Я НИЧЕГО не делал! Может кто то объяснить природу данного явления??? Соединение с базой всё это время было, т.к. иначе приложение бы закрылось по исключению, которые я не обработал в коде. ЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда, он уверенно сказал, что коммит делается после каждого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:45 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустамгрохать из неё необязательно, кстати Некстати. Обязательно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:45 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635Можно конечно постоянно опрашивать таблицу, но это идиотизм если коммита нет, никакие новые записи в таблице не увидишь. А если видишь, значит коммит есть. kadet635Может кто то объяснить природу данного явления??? в приложении произошел коммит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:48 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, Это замечательно, но реализовано. Вопрос мой был в другом- почему триггер не отдает event. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:50 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635Вопрос мой был в другом- почему триггер не отдает event. Триггер event отдаёт, однозначно. Почему твоё приложение его не ловит - вопрос к твоему приложению и (в частности) используемой им кривой прослойке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:53 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kdvkadet635Можно конечно постоянно опрашивать таблицу, но это идиотизм если коммита нет, никакие новые записи в таблице не увидишь. А если видишь, значит коммит есть. kadet635Может кто то объяснить природу данного явления??? в приложении произошел коммит. А где он был всю вчерашнюю ночь и сегодня до 16. авторЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда, он уверенно сказал, что коммит делается после каждого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:54 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovkadet635Вопрос мой был в другом- почему триггер не отдает event. Триггер event отдаёт, однозначно. Почему твоё приложение его не ловит - вопрос к твоему приложению и (в частности) используемой им кривой прослойке. Выше я писал, что когда через IBexpert добавлял строку и руками делал коммит, мое приложение ловило event ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:55 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Hello, Kadet635! You wrote on 17 октября 2016 г. 16:57:02: Kadet635ЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда, он уверенно сказал, что коммит делается после каждого запроса.все пациенты врут (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 16:57 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635А где он был всю вчерашнюю ночь и сегодня до 16. х.з. можно было бы посмотреть общение приложения с сервером через FBScanner, раз используется ФБ 1.5. Но чисто теоретически, что могло бы быть - эвенты блокировались или каким-то софтом на компе сервера или клиента, или установлен старый сервер и клиент. Чтобы проверить, можно в пустой (или той) базе создать процедуру с post_event, подергать ее с commit, и посмотреть, так же приходят события, или сразу по коммиту. Если по коммиту, значит в приложении коммит делается как-то не так, или "не тогда, когда надо". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:00 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
ещё нужно глянуть количество событий пришедших в пакете Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:03 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kdvkadet635А где он был всю вчерашнюю ночь и сегодня до 16. х.з. можно было бы посмотреть общение приложения с сервером через FBScanner, раз используется ФБ 1.5. Но чисто теоретически, что могло бы быть - эвенты блокировались или каким-то софтом на компе сервера или клиента, или установлен старый сервер и клиент. Чтобы проверить, можно в пустой (или той) базе создать процедуру с post_event, подергать ее с commit, и посмотреть, так же приходят события, или сразу по коммиту. Если по коммиту, значит в приложении коммит делается как-то не так, или "не тогда, когда надо". Я тоже думал что чем то блокируются, но потом подумал что авторВыше я писал, что когда через IBexpert добавлял строку и руками делал коммит, мое приложение ловило event Получается действительно не коммитились транзакции, раз когда руками коммитил, все ок было... только почему? Слышал что то про зависшие транзакции... Мимопроходящий Hello, Kadet635! You wrote on 17 октября 2016 г. 16:57:02: Kadet635 ЗЫ Удалось выйти на связь с разрабом программы, которая добавляет данные туда, он уверенно сказал, что коммит делается после каждого запроса. все пациенты врут (с) нет повода ему не доверять т.к. сейчас евенты падают сразу, соответственно коммит происходит сразу. Если только разраб после моего письма не доработал программу, сделав там коммиты, затем подобрал брутом логин и пас по rdp к моему компу и не подменил исполняемый файл программы) А так всем тем, кто писал по существу, а не зашел поржать, человеческое спасибо))) Кто в Питере пишите с меня пиво) В дальнейшем обсуждении не вижу смысла, т.к. сейчас проблемы нет, если появится, то по совету уважаемого kdv буду использовать FBScanner. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:17 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
я честно говоря не помню, что там с кешем метаданных при создании триггера "на лету" и активных коннектах на классике. проверять лень. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:20 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635Слышал что то про зависшие транзакции... забудь про это. limbo никакого отношения к твоему случаю не имеет и существуют только для 2PC транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:25 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Симонов Денисkadet635Слышал что то про зависшие транзакции... забудь про это. limbo никакого отношения к твоему случаю не имеет и существуют только для 2PC транзакций. Понял, может у тебя тогда есть какие то предположения на этот счет? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:30 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635, я написал про COMMIT RETAIN. Надо смотреть FBScanner что там реально происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:33 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
kadet635есть какие то предположения на этот счет? 19791590 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 17:35 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам(грохать из неё необязательно, кстати)Если не грохать, будет та же лажа при многопользовательской вставке, что и с полем-генератором. А именно, вставка более ранних значений позже, чем уже считанные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 18:03 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
МимопроходящийHello, Kadet635! You wrote on 17 октября 2016 г. 15:28:57: Kadet635> Вопрос к знатокам, если делать триггер before, а не after транзакция тоже нужна? я тыбе адын умный весч скажу, толька ты ни абыжайса (с) вне транзакции триггеры не работают ни в одной СУБД. а я щас топор ему дам, ногу себе оттяпать! ....но бывают блоки кода работающие in autonomous transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2016, 13:41 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Хотя... не в 1.5 наверное ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2016, 13:43 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Hello, Arioch! You wrote on 20 октября 2016 г. 13:43:42: Arioch> /а я щас топор ему дам/да чо уж там, кидай сразу гранату Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2016, 13:44 |
|
Снова триггеры в firebird
|
|||
---|---|---|---|
#18+
Мимопроходящий, а вот не работают на гейте fidolook-markup ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2016, 13:55 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561911]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 177ms |
0 / 0 |