![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
ksili |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Есть два приложения, работающих с одной БД (FB 2.0.3). Проблема в том, что одно из них может использовать в запросах к БД в качестве переменных только строки или целочисленные переменные. Из-за этого для хранения суммы денег наверно будет использоватья такой приём: сумма будет храниться в двух видах - SUMMA типа NUMERIC(15,2) (это сумма в рублях - так было изначально) и SUMMA_KOP типа INTEGER (это сумма в копейках). Одно из приложений будет работать с одним полем, а второе с другим.
Задача - синхронизировать изменения этих полей. Т.е. при обновлении поля SUMMA в SUMMA_KOP должно записываться SUMMA*100, а при обновлении SUMMA_KOP в SUMMA запишется SUMMA_KOP/100. Проблема - как определить, какое именно поле обновлятся? Т.е. как можно отличить в триггере два запроса:
и
Вот такой триггер before update так как надо не работает:
т.к. new.summa и new.summa_kop смотрится в БД, а не из запроса обновления. Это сообщение отредактировал(а) ksili - 17.3.2008, 09:26 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||||
|
|||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
в триггерах (при обновлении) есть контекстные переменные New и Old
Добавлено через 1 минуту и 15 секунд old.summa - это значение, которое хранится в поле на данный момент |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Да. Это то, что нужно. Теперь триггер выглядит так:
Но теперь проблема с преобразованием типов. Если присваиваю summa_kop=30, то summa получается вместо 0,3 равной нулю Добавлено через 3 минуты и 7 секунд а вот при summa_kop=130, получается summa=1,3 то есть нормально Добавлено через 4 минуты и 23 секунды А нет, теперь всё работает. Спасибо, Akella -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |