Как слушать события Firebird с помощью Delphi DBExpress - PullRequest
0 голосов
/ 09 ноября 2018

Как я могу прослушивать события Firebird с помощью Delphi DBExpress?

Я знаю, что у Zeos / IBComponents есть специальные компоненты для этого, к сожалению, я не могу их использовать.

1 Ответ

0 голосов
/ 09 ноября 2018

Обновление Я нашел способ добавить мониторинг событий в приложение DBExpress, которое может быть применимо к вашей ситуации, когда нецелесообразно переписывать приложение, чтобы Избегайте использования DBExpress. Вот что я сделал до сих пор, и он отлично работает.

  1. Я написал минимальное приложение DBExpress, которое открывает и редактирует таблицу Interbase и сохраняет изменения обратно в таблицу базы данных. Для того, что я имел в виду для этой попытки, я решил, что не имеет значения, что база данных - это Interbase, а не Firebird. Давайте назовем это приложение DBXApp.

  2. Затем я написал эквивалентное приложение с использованием компонентов Interbase (IBDatabase и т. Д.) И включил поддержку событий с использованием компонента IBEvents для записи полученных событий в заметку. Позволяет называть это IBApp.

  3. Одновременно работая с DBXApp и IBApp, IBApp видит события, вызванные сохранением изменений в таблице DBXApp. Итак, я подумал:

  4. Теперь откройте DBXApp в IDE в IDE и скопируйте в него IBDatabase1, IBEvents1 и Memo1, добавьте в обработчик OnEventAlert тот же код, что и в IBApp (это заняло буквально 90 секунд), перекомпилируйте и запустите , Теперь в заметке в DBXApp видны обновления таблицы, опубликованные IBApp. Таким образом, IBApp может видеть события, запускаемые DBXApp и наоборот.

  5. Теперь мне кажется - и это бит, который я еще не сделал - что если ваша база данных Firebird - это та, к которой могут подключаться компоненты Delphi Interbase, вы должны иметь возможность изменить приложение Firebird, чтобы добавить мониторинг событий так же, как я это делал в DBXApp. Конечно, это большое «если», но если ваше приложение не слишком новое (и кажется маловероятным, что оно есть), то, возможно, IBDatabase сможет подключиться к своей базе данных FB.

Шаги 1-3 заняли у меня всего пару часов (и во многом это было связано с поиском рекламы, исправляющей глупую ошибку конфигурации, которую я сделал), поэтому я думаю, что стоит попробовать. Дайте нам знать, как вы поживаете.

Оригинальный ответ Вы не говорите, почему вы не можете использовать Zeos / IBComponents, но, насколько мне известно, DBExpress не обрабатывает Post_Event Firebird и, судя по результатам Google, не может быть легко сделан чтобы, иначе кто-то сделал бы это.

Вы можете взглянуть на исходный код Zeos , чтобы увидеть, как он реализует поддержку Post_Event, а затем сделать то же самое в коде вашего проекта. Предположительно, это будет вопрос регистрации обратного вызова в Firebird и обработки того, что он отправляет.

Еще одно место, где можно посмотреть, это (довольно старая) статья о событиях Firebird . Хотя с тех пор Firebird отошел от Interbase, я думаю, что есть все еще разумная перспектива использования механизма обработки событий IB.

Кстати, последние версии Delphi поставляются с библиотекой компонентов FireDAC db, которая поддерживает уведомления о событиях от внутренних СУБД, включая Firebird. Как вы увидите здесь , его оповещение о событиях для Firebird использует механизм Post_Event.

...