IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
Korvin
- Сообщения: 3
- Зарегистрирован: 15 окт 2008, 15:53
Сообщение
Korvin » 15 янв 2009, 09:14
Доброго времени суток всем!
Помогите разобраться:
решил переехать на Delphi 2009, где рулит Unicode;
база в кодировке win1251;
сервер FireBird 2.0
В общем проблема в том, что TIBEvents не ловит события, посылаемые из базы данных.
Это кривость компонента TIBEvents? Или же проблема в кодировках.
Пробовал базу модифицировать в Unicode, но и тогда события не отлавливаются компонентом.
УТОЧНЯЮ!
В триггере на вставку записи в таблицу отправляю событие
В программе:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
IBEvents1.Events.Add('some_event');
IBEvents1.RegisterEvents;
IBTransaction1.StartTransaction;
{ некоторые действия по добавлению записи
в таблицу на которой висит триггер
добавление записи в таблицу выполняется
посредством хранимой процедуры }
IBTransaction1.Commit;
end;
procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: string;
EventCount: Integer; var CancelAlerts: Boolean);
begin
Caption := EventName;
// здесь в заголовке формы должно появиться
// имя произошедшего события
// НИЧЕГО не происходит!!!
end;
Последний раз редактировалось
Korvin 15 янв 2009, 11:37, всего редактировалось 1 раз.
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 15 янв 2009, 11:10
[вырезано самоцензурой]
Последний раз редактировалось
WildSery 15 янв 2009, 15:51, всего редактировалось 1 раз.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 15 янв 2009, 15:11
события приходят по коммиту той транзакции, где они были инициированы. в Д2009 проверить пока не могу, еще не поставил.
Но в примерах есть IBXEvents, попробуй его. Может ты что не так сделал.
-
Korvin
- Сообщения: 3
- Зарегистрирован: 15 окт 2008, 15:53
Сообщение
Korvin » 16 янв 2009, 08:54
В общем история такая:
1) Пример из комплекта поставки проверить не могу. Не поддерживается ODS11.2.
2) Код примера понятный. На основе его и писал в тестовом приложении. Причем в этом тестовом приложении транзакция всего одна и в ней все делается.
3) Получилось отловить событие при соблюдении следующих условий:
- база данных создана в кодировке FSS_UNICODE
- название события состоит из одного символа
Такие события клиент отлавливает и реагирует.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 20 янв 2009, 17:07
Пример из комплекта поставки проверить не могу. Не поддерживается ODS11.2.
http://www.ibase.ru/devinfo/prevver.htm
это формат IB 7.5. Впрочем, база эта пустая, там только одна процедура, и больше ничего нет
Код: Выделить всё
CREATE OR ALTER PROCEDURE EVENTDEMO(
EVENT VARCHAR(40))
AS
begin
post_event :event;
end
- база данных создана в кодировке FSS_UNICODE
зачем этот ужас? А UTF8?
я подозреваю, что IBEventAlerter тупо не юникодный. Или что то там с IB API в этом смысле.
-
Korvin
- Сообщения: 3
- Зарегистрирован: 15 окт 2008, 15:53
Сообщение
Korvin » 21 янв 2009, 05:52
to KDV
УЖАС
использовался в качестве эксперимента...
сегодня попробовал, и оказалось, что кодировка ему вообще по-боку... и клиенты принимают "односимвольные события"!!!
НО тема так и остается открытой, хотя... скачал Firebird-2.1.1.17910 сегодня поставлю и буду пробовать
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 21 янв 2009, 13:25
и клиенты принимают "односимвольные события"!!!
потому и подозреваю, что апи алертов где-то не переделано на юникод. Или в FB API, или в IBX.
то есть, нужно копать код.