|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Всем добрых выходных, в MSSQL и C# помнится были компоненты и возможность посволяющие привязать событие в базе данных (например изменение данных в определённом поле, записи, таблице итп) к событию в программе. Есть ли что то подобное штатное в FireDac дельфей, и в штатных компонентах для работы с базами Firebird в Lazarus? И если нет то кто и как выкручивается если перехват такого события на клиенте понадобился? Delphi и FireDac от 10.4 Lazarus последний стабильный релиз. Firebird от 2.5.8 и выше. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 14:59 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
hlopotunв MSSQL и C# помнится были компоненты и возможность посволяющие привязать событие в базе данных (например изменение данных в определённом поле, записи, таблице итп) к событию в программе. Не было. Этот функционал есть у Firebird/Interbase и Oracle, но у MS SQL его нет. Все выкручиваются через самописные CLR функции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 15:03 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunв MSSQL и C# помнится были компоненты и возможность посволяющие привязать событие в базе данных (например изменение данных в определённом поле, записи, таблице итп) к событию в программе. Не было. Этот функционал есть у Firebird/Interbase и Oracle, но у MS SQL его нет. Все выкручиваются через самописные CLR функции. Дмитрий, а в Firebird полагаю речь идет о схеме "триггеры + события" ? Помнится, не раз видел (в том числе и от вас) рекомендации не использовать события совсем. Насколько это актуально в тройке и четверке FB ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 15:11 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 15:12 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
SoftologicПомнится, не раз видел (в том числе и от вас) рекомендации не использовать события совсем. Насколько это актуально в тройке и четверке FB ? Эти рекомендации связаны в первую очередь с тем, что новички их используют слишком рьяно вплоть до обновления запросов в гриде. Во вторую очередь - с тем, что создать универсальный VCL компонент для их получения невозможно без проктостоматологии, поскольку на уровне API событие приходит как вызов callback функции в фоновом потоке. Сочетание этих двух факторов способно породить такие спецэффекты, что без поллитра не разберёшься. Отсюда рекомендации новичкам не использовать их, от греха подальше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 15:20 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov SoftologicПомнится, не раз видел (в том числе и от вас) рекомендации не использовать события совсем. Насколько это актуально в тройке и четверке FB ? Эти рекомендации связаны в первую очередь с тем, что новички их используют слишком рьяно вплоть до обновления запросов в гриде. Во вторую очередь - с тем, что создать универсальный VCL компонент для их получения невозможно без проктостоматологии, поскольку на уровне API событие приходит как вызов callback функции в фоновом потоке. Сочетание этих двух факторов способно породить такие спецэффекты, что без поллитра не разберёшься. Отсюда рекомендации новичкам не использовать их, от греха подальше. Ок, тогда следующий вопрос скорее к разработчикам. Посмотрел справку к четверке - эвенты все также без параметров. Следовательно, если нужно передать параметр, делаем конкатенацию с наименованием эвента. Но... это как то... не вполне не изящно, мягко говоря?! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 16:16 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
SoftologicНо... это как то... не вполне не изящно, мягко говоря?! Зато изящной является их текущая реализация в виде простейших счётчиков. Которая таки да, не предусматривает места для payload (в отличии от оракуловской и слоновьей, которые построены на очереди). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 16:26 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Softologic Следовательно, если нужно передать параметр, делаем конкатенацию с наименованием эвента ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 16:29 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Softologic, есть параметр. :) Параметр называется "количество срабатываний в данной транзакции". Дело в том, что эвенты фаерберда к клиенты летят по коммиту. Прикинь, как было бы весело при (например) каскадном удалении 10000 записей получить 10 000 эвентов, да ещё с параметрами. :) ... Совсем не сложно "параметры" писать в табличку-лог, дополняя записи таймстампом: получил эвент, выгреб параметры начиная с такого-то момета, и делай с ними, что хочешь... ... Также несложно реализовать эвенты, как в одном из примеров для MSSQL: зовёшь udf - клиент http (например) сервера, а в приложении - вебсокеты, ждущие эвента. Только срабатывать будут сразу, а не по коммиту... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 16:37 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
ъъъъъ Softologic, есть параметр. :) Параметр называется "количество срабатываний в данной транзакции". Дело в том, что эвенты фаерберда к клиенты летят по коммиту. Прикинь, как было бы весело при (например) каскадном удалении 10000 записей получить 10 000 эвентов, да ещё с параметрами. :) ... Совсем не сложно "параметры" писать в табличку-лог, дополняя записи таймстампом: получил эвент, выгреб параметры начиная с такого-то момета, и делай с ними, что хочешь... ... Также несложно реализовать эвенты, как в одном из примеров для MSSQL: зовёшь udf - клиент http (например) сервера, а в приложении - вебсокеты, ждущие эвента. Только срабатывать будут сразу, а не по коммиту... Ну я собсно вообще от них (эвентов) отказался :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 18:35 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
_Vasilisk_ Вы получите события только те, на которые подписаны. Т.е., либо вы при подписке указываете сразу все возможные комбинации параметров, либо придумываете как от них отказаться Так и делал когда то давно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 18:51 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 21:02 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Док ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 21:23 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
YuRock, в Лазаре нормально работает. На дельфях не проверял. Да и использую я его для взведения пропертей-флагов. При активации/перерисовке окон/вкладок датасеты обновляются и сбрасывают флаг, только если флаг взведен. Красота. А в чем глюк? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 07:05 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
Док А в чем глюк? И не всегда приходили события, и не все, и падало при определенном кол-ве зарегистрированных. Ну и, конечно, логические глюки от того, что OnEvent реализован через synchronize. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 11:55 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
YuRock пока напильником не подточишь. YuRock логические глюки от того, что OnEvent реализован через synchronize. Я сам сделал так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
а потом в контексте потока БД вызывается такое Код: pascal 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 16:18 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
_Vasilisk_ Мне интересно, а чем ты это заменил? Потому что переключение потоков там необходимо. Когда надо - полылаю сообщение в главный поток (уже в обработчике), когда не надо - что-то другое делаю, прямо там. Гриды мне там обновлять не надо, я таким не пльзуюсь. Обычно - добавляю в свою очередь задание. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 20:11 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
ъъъъъ Softologic, есть параметр. :) Параметр называется "количество срабатываний в данной транзакции". Дело в том, что эвенты фаерберда к клиенты летят по коммиту. Прикинь, как было бы весело при (например) каскадном удалении 10000 записей получить 10 000 эвентов, да ещё с параметрами. :) ... Совсем не сложно "параметры" писать в табличку-лог, дополняя записи таймстампом: получил эвент, выгреб параметры начиная с такого-то момета, и делай с ними, что хочешь... ... Также несложно реализовать эвенты, как в одном из примеров для MSSQL: зовёшь udf - клиент http (например) сервера, а в приложении - вебсокеты, ждущие эвента. Только срабатывать будут сразу, а не по коммиту... Таблички, логи, udf, http, вебсокеты, ждущие ивенты. Какой ужас и кошмар. Как хорошо, что я юзаю иветны только в слоне, где они с параметрами :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 20:27 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
YuRock Ничем, так из того потока и вызывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 20:49 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
_Vasilisk_ YuRock Ничем, так из того потока и вызывается. Да, QueueEvents всё еще вызывается в synchronize. Даже не знал. Я только вызов события наверх убрал оттуда, а это вроде не мешало. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 21:00 |
|
Перехват события базы данных FireBird клиентон Delphi/Lazarus
|
|||
---|---|---|---|
#18+
_Vasilisk_Из него нельзя вызывать isc_que_events() И не только. Оттуда вообще практически ничего нельзя вызывать. isc_event_counts() - можно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2021, 21:16 |
|
|
start [/forum/topic.php?fid=58&msg=40109870&tid=2036906]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
97ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 280ms |
total: | 475ms |
0 / 0 |