Отличие формул от триггеров

Формулы и триггеры выполняют одинаковые вычисления. Но делают они это по-разному и поэтому они несовместимы. Чтобы лучше понять это, рассмотрим из каких частей состоит программа.

На самом деле программа, чтобы отобразить вам таблицу с данными, обращается не файлу с данными (base.fdb), а к СУБД (Система Управления Базами Данных). Это другая программа, которая и имеет доступ к данным. Любое действие программы Supasoft всегда идет к Firebird. Это происходит как в локальной версии, так и в сетевой.

Формулы работают в программе, а триггеры — в СУБД.

Формулы работают так, что когда меняется одно поле, программа «знает» об этом и меняет другое поле согласно формуле.

Программа видит изменение количества и цены и меняет (пересчитывает) стоимость.

Триггеры работают в СУБД, а она не сообщает программе, что изменилось какое-то поле. Поэтому программа не может явно реагировать на это и не может пересчитывать формулы связанные с полем-приемником. Но в данном примере, после добавления вами записи в дочернюю таблицу, программа запрашивает значение поля-приемника из СУБД и приводит в действие формулы связанные с полем-приемником. Но бывают случаи, когда эта схема не работает.

Кажется, что если вычисления производили бы либо формулы либо триггеры, то проблема использования полей-приемников в формулах была бы решена. Но на самом деле это невозможно.

  • Триггеры обеспечивают 100%-ную точность вычислений при многопользовательской работе при суммировании данных в дочерних объектах. Формулы такое обеспечить не могут.
  • Полностью возложить вычисления на триггеры так-же нельзя. Триггеры не знают, что есть такое понятие как текущий пользователь и не могут обеспечить те возможности формул, которые требуются.

Понимание того, как работают формулы и триггеры, и как их эффективно сочетать, гарантирует точные вычисления в программе.