![]() |
![]() |
Null 20.09.2004 - 17:24 |
Прога работает с BDE. В псевдониме указан ноавтокоммит. В проге запущена одна большая транзакция Как из этой проги послать IB событие не делая втрого соединения с БД? Проблема в том, что запустить вторую транзакцию в одном соединении нельзя, не закрыв предварительно эту большую транзакцию? |
Moskal 1 - 20.09.2004 - 17:51 |
Ну по-моему принципиально никак без второго соединения. ИМХО. |
leschakon2004 2 - 20.09.2004 - 18:03 |
Прога запускает транзакцию и что-то делает, потом завершает транзакцию. 1) Если в процессе выполнения ЧТО ТО ДЕЛАЕТ модифицируются таблици, то можно создать триггеры типа SET TERM !! ; CREATE TRIGGER ИМЯ ТРИГГЕРА FOR ИМЯ ТАБЛИЦИ AFTER INSERT AS BEGIN POST_EVENT "вставлена_запись"; END !! SET TERM ; !! В своей же проге можно эти события ловить. 2) (это варяд ли прокатит) запускать SQL.ExeqSQL запрос с коммандой POST_EVENT "text"; |
Hook 3 - 20.09.2004 - 18:08 | Сделать вторую транзакцию, пишущую. |
Null 4 - 20.09.2004 - 19:29 |
leschakon2004 - 2 Запрос SQL.ExeqSQL - не годится вообще для ноавтокоммит. Hook - 3 Сделать вторую транзакцию, пишущую - каким образом это сделать в одном соединении? |
Null 5 - 20.09.2004 - 19:46 |
Moskal - 1 Для этого нужно кидать на форму еще один компонент датабэйз и затем коннктиться к нему с паролем. Можно конечно передать ему параметры соединения основного датабэйз. Муторно это как-то. А нельзя ли как-нибудь попроще? |
leschakon2004 6 - 20.09.2004 - 20:35 | 5 что такое ноавтокоммит? Это когда явно чтоли транзакциб надо стартовать ? |
Null 7 - 20.09.2004 - 21:30 | Если в псевдониме BDE стоит ноавтокоммит, то вызов SQL.ExeqSQL не завершается коммитом транзакции. |
FWP 8 - 21.09.2004 - 08:01 | От BDE отказаться никак нельзя? |
Hook 9 - 21.09.2004 - 09:21 | А..сорри, не углядел что через БДЕ. Прости, но через БДЕ работать с ИБ - кощунство :) Тогда только другой коннект. Привычная вещь при использовании БДЕ. А БДЕ разве может ловить евенты? |
Null 10 - 21.09.2004 - 10:20 |
FWP - 8 & Hook - 9 1. BDE наиболее стабильное и быстрое средство работы с БД. Это уже проверено длительной эксплуатацией системы и различными экспериментами. 2. Через БДЕ работать можно, но проблема в том, что при ноавтокоммит в БДЕ нужно тонко управлять транзакциями, так как при одном соединении нельзя запустить две параллельные транзакции. Вот тут-то и возникает проблема с передачей событий, когда запущена одна большая транзакция, и срочно нужно ответить на запрос клиента путем передачи события. |
leschakon2004 11 - 21.09.2004 - 11:12 |
10 Я так понимаю, что надо из тела большой транзакции оповещать других пользователей о происходящем. Раз нельзя использовать сообщения на уровне IB, то может лучше посылать события по сети ? С чем связана такая надобность событий ? |
Null 12 - 21.09.2004 - 12:32 |
11 //Раз нельзя использовать сообщения на уровне IB, то может лучше посылать события по сети ? С чем связана такая надобность событий ?// С точки зрения скорости доставки событий через интернет и учитывая сильное засорение интернетовского трафика служебными пакетами мне представляется, что IB события, передаваемые через отдельный порт, будут проходить значительно быстрее. Т.е. реакция системы в целом на свои внутренние события будет очень быстрой и в некотором смысле скрытой. Также нужно учитывать, что возможна передача событий не только по протоколй IP. |
Null 13 - 21.09.2004 - 12:34 |
11 + Из тела большой транзакции передавать события нельзя. Нужно эту большую транзакцию вначале коммитить. Или использовать второе соединение с БД. |
leschakon2004 14 - 21.09.2004 - 13:28 |
Или например разбить большую транзакцию на более мелкие. Между стартами мелких транзакций можно посылать события INTERBASE а можно и писать информацию в отдельную таблицу. По содержанию этой таблици другие пользователи могут узнавать , что происходит. |
ИгорьК 15 - 21.09.2004 - 15:35 | 10-"BDE наиболее стабильное и быстрое средство работы с БД" - вообще-то странные эксперименты наверное были ;-). БДЕ быстрее только за счет того, что практически все кэширует на локале. А на счет стабильности я вообще противоположного мнения, хотя ладно - каждому свое. |
leschakon2004 16 - 21.09.2004 - 16:03 |
13 обрисуй примерно задачу. Для чего оповещать юзеров из длиннющей транзакции. 1) Надо запрещать им что-то делать с базой ? 2) Надо чтобы они видели результаты какого-то счета ? Какова цель этого опевещения ? |
Hook 17 - 22.09.2004 - 10:52 | Может просто написать UDF которая будет при вызове отправлять на заданный порт нужного адреса нужный пакет? |
Hook 18 - 22.09.2004 - 10:55 | во флейм - BDE стоит использовать только если приложение общаеться с двумя-тремя движками баз данных одновременно. Для IB использование этого монстра, остановившегося в развитии, просто вредно. ибо неправильная его работа с сервером делает невозможным раскрытие всего потенциала IB. |