SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Как правильно обработать post_event в приложении? (обработка post_event в приложении)
Как правильно обработать post_event в приложении? [сообщение #153] Fri, 08 July 2022 15:07 Переход к следующему сообщению
RusMikle в настоящее время не в онлайне  RusMikle
Сообщений: 18
Зарегистрирован: June 2022
Junior Member
Всем доброго времени суток,

как правильно обрабатывать событие отправленное из firebird посредством post_event в приложении (например на делфи).
Чем это событие лучше ловить? Не думаю что тупо переодически перечитывать таблицу событий. Или?

Спасибо
Re: Как правильно обработать post_event в приложении? [сообщение #154 является ответом на сообщение #153] Fri, 08 July 2022 16:38 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 368
Зарегистрирован: June 2022
Senior Member
class Program
{
    static void Main(string[] args)
    {
        FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
        cs.DataSource = "localhost";
        cs.Database = @"TESTDATABASE.FDB";
        cs.UserID = "SYSDBA";
        cs.Password = "masterkey";
        cs.Charset = "NONE";
        cs.Pooling = false;

        FbConnection connection = new FbConnection(cs.ToString());
        connection.Open();

        FbRemoteEvent revent = new FbRemoteEvent(connection);
        revent.AddEvents(new string[] { "new_order" });

        // Add callback to the Firebird events
        revent.RemoteEventCounts += new FbRemoteEventEventHandler(EventCounts);

        // Queue events
        revent.QueueEvents();

        string sql = "EXECUTE BLOCK AS BEGIN POST_EVENT 'new_order'; END";

        FbCommand command = new FbCommand(sql, connection);

        for (int i = 0; i < 5; i++)
        {
            command.ExecuteNonQuery();
        }

        System.Threading.Thread.Sleep(2000);
        connection.Close();
        Console.ReadLine();
    }

    static void EventCounts(object sender, FbRemoteEventEventArgs args)
    {
        Console.WriteLine("Event {0} has {1} counts.", args.Name, args.Counts);
    }
}
С помощью Firebird-NETProvider как-то так. Но коду лет 10, с новыми версиями может и не работать.
Re: Как правильно обработать post_event в приложении? [сообщение #155 является ответом на сообщение #154] Fri, 08 July 2022 17:05 Переход к предыдущему сообщениюПереход к следующему сообщению
RusMikle в настоящее время не в онлайне  RusMikle
Сообщений: 18
Зарегистрирован: June 2022
Junior Member
ok, спасибо! Принцип понятен, с остальным разберусь.
Re: Как правильно обработать post_event в приложении? [сообщение #176 является ответом на сообщение #155] Wed, 13 July 2022 23:27 Переход к предыдущему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 101
Зарегистрирован: June 2022
Senior Member
procedure TfrmPatInfo.evtPatInfoEventAlert(Sender: TObject; EventName: string;
  EventCount: longint; var CancelAlerts: Boolean);
begin
  if (EventName = 'tbl_people_modified') then
  begin
    FIsNeedRefreshPassData:= True;//взводим флаг
    if IsDocked //если пристыкована
      then
        frmMain.pcMainChange(Sender) //разбираемся в главной форме
      else
        if (Screen.ActiveForm = Self)
          then pcPatInfoChange(Sender);//обновляемся немедленно, если форма на виду
  end;
я у себя (под IBX) флаги использую, чтобы обновлять только при отображении dbware компоненты


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/
Предыдущая тема: Изменение COLLATION во всей базе
Следующая тема: Update or insert, оптимизация записи
Переход к форуму:
  


Текущее время: Thu Dec 19 00:33:25 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01118 секунд