#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 Согласовано. Используйте одно событие без параметров, в оповещателе запрашивайте таблицу для новых записей, используйте конкретную информацию из возвращаемых результатов. При необходимости обновите записи, чтобы предотвратить повторную обработку при следующем событии.