Вопросы стыковки визуальных компонент (DataControls, EhGrid, VirtualTreeView, DevExpress и т.п.) с данными из БД.
Модераторы: kdv, CyberMax
-
bratslav
- Сообщения: 5
- Зарегистрирован: 26 апр 2010, 06:56
Сообщение
bratslav » 16 дек 2010, 12:43
Привет всем!
Использую FB2.1
На тригерах вешаю post_event 'RefreshDB';
На клиенте
Код: Выделить всё
procedure TfZakaz.IBEvents1EventAlert(Sender: TObject; EventName: string;
EventCount: Integer; var CancelAlerts: Boolean);
begin
try
// ShowMessage('Поймал');
BuildSQL(False); // Переоткрыть запрос
if not IBEvents1.Registered then IBEvents1.RegisterEvents;
except
end;
end;
По умолчанию IBEvents1.Registered == False
При активации формы IBEvents1.RegisterEvents;
На клиенте Event ловится, но вешает программу везде кроме того клиента откуда событие генерируется (я знаю, что генерирует сервер:-))
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 16 дек 2010, 14:04
В обработчике событий нельзя выполнять запросы к БД
-
Dimitry Sibiryakov
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сообщение
Dimitry Sibiryakov » 16 дек 2010, 14:42
В общем случае это зависит от того как написан компонент. Но в данном конкретном случае - руки всё равно надо отрывать.
-
bratslav
- Сообщения: 5
- Зарегистрирован: 26 апр 2010, 06:56
Сообщение
bratslav » 17 дек 2010, 15:53
Не понял.
Мне руки отрывать? А в каком месте?
Или разработчику?
Тогда где взять нормальный компанент?
С уважением, Брацлавский Вячеслав.
-
Dimitry Sibiryakov
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сообщение
Dimitry Sibiryakov » 18 дек 2010, 14:54
Тебе, тебе. И отрывать в месте их роста - у самой ж. Влад же чёрным по-русски сказал - не надо рефрешить датасеты по эвенту.
А нормальных алертеров в природе не существует. Для правильной работы с событиями надо код, использующий непосредственно API адаптировать к каждому конкретному приложению.