Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2013, 14:04   #1
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию "Утверждения" в InterBase

в стандарте SQL определены "Утверждения" при помощи которых можно определить взаимосвязь между данными столбцов из различных таблиц.
У меня есть две таблицы: Paies - таблица зарплат (поля таблицы: Cod - код зарплаты, Data - дата выдачи зарплаты, Sum - сумма) и таблица Items - содержит информацию по каждой зарплате в разбивке по статьям (оклад, налог, премия и т.д.) Поля таблицы Items: ICod - код зарплаты (внешний ключ для связи с Paies), Item - статья (строка символов), ISum - сумма.
Т. е. если сотруднику выдается зарплата в размере 8700 (запись в таблице Paies), то для нее в таблице Items есть две записи: Оклад - 10000, Налог = -1300. Таким образом 8700 = 10000 + (-1300).
Мне необходимо определить "Утверждение" по которому Paies.Sum = сумме значений полей ISum из таблицы Items для данной зарплаты. Например:
Код:
CREATE ASSERTION MY_SUM CHECK (Paies.Sum = SELECT SUM(ISum) FROM Items WHERE Paies.Cod = Items.Cod)
но в InterBase нет инструкции create assertion. Как такое реализовать?
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 03.07.2013, 15:03   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Зачем вообще в таблице Paies поле Sum, если эту сумму можно элементарно вычислить запросом?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.07.2013, 15:05   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

примерно так
Код:
CREATE OR ALTER TRIGGER items_biu0 FOR items
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
  UPDATE paies 
  SET sum = (SELECT SUM(ISum) FROM Items WHERE Paies.Cod = Items.Cod)
  WHERE cod = NEW.cod;
END
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04