К списку форумов К списку вопросов
Как передать IB событие
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.

К списку вопросов на форуме Программирование

>>