Как зарегистрировать события, отправленные из Firebird, с параметрами в Delphi

#delphi #events #firebird

#delphi #Мероприятия #firebird

Вопрос:

У меня есть событие, отправленное из базы данных firebird в триггер после вставки новой записи следующим образом: post_event ‘SPOOL’ new.username; Я хочу зарегистрировать это событие с помощью SIBfibEventAlerter (FIBPlus) в приложении Delphi и запустить процедуру. Проблема в том, что название события зависит от имени пользователя, добавившего запись.

Комментарии:

1. Возможно, вы могли бы прочитать имена пользователей из таблицы user (если new.username это на самом деле поле, а не какое-то системное значение FB) и динамически создавать компоненты eventalerters, по одному на имя пользователя.

2. @mjn: Вы должны опубликовать это как ответ, чтобы получить оценку. Я думаю, что нет другого способа действительно сделать это, используя «параметры»..

Ответ №1:

Вы могли бы прочитать имена пользователей из таблицы user (если new.username это на самом деле поле, а не какое-то системное значение FB) и динамически создавать компоненты eventalerters, по одному на имя пользователя.

Комментарии:

1. Проблема в том, что OP отправляет событие из триггера after-insert, поэтому новая запись пока не видна внешним транзакциям (при условии изоляции моментального снимка по умолчанию).

2. @TOndrej исправьте, если это триггер после вставки для пользовательской таблицы. Если это, например, вставка в таблицу заказов, в которой есть поле username, она должна работать нормально.

Ответ №2:

Поскольку события на самом деле не поддерживают параметры, одним из способов было бы добавить дополнительные поля в таблицу, которые содержат автоматически добавляемый идентификатор (или временную метку) и данные, которые вам нужны в качестве параметра.

Комментарии:

1. 1 Согласовано. Используйте одно событие без параметров, в оповещателе запрашивайте таблицу для новых записей, используйте конкретную информацию из возвращаемых результатов. При необходимости обновите записи, чтобы предотвратить повторную обработку при следующем событии.