вычисляемое поле

Тема в разделе "Delphi - Базы данных", создана пользователем valentofer, 15 июн 2011.

  1. valentofer

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    Доброго времени суток. Есть таблица в MS SQL Server в ней, помимо всех полей есть три интересующие: Зарплата (zp), КоэфУвелич(KY) и Начислено(Nach). значит при изменении KY должно автоматом пересчитать Nach по формуле Zp*Ky... Ну тут вродь все просто. ПВычисляемое поле сделать - это конечно хороше, но мне надо что бы Nach сохранялось в БД. Значит Поидее остается перебирать таблицу вручную... Из этого следует собственно вопрос: как отслеживать изменение KY? Подключаюсь через ADOTable(могу перебить под ADOQuery тут без разницы). Помогите если не кодом)), то советом как отследить изменения, какое события ADO использоват... Сильно ногами не пинать))
     
  2. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Вообще логично перенести данный функционал на хранимые процедуры MS SQL Server, тогда в приложении только получать значение не имея возможности его менять.
    Если про ADOTable, то у него насколько я помню есть события AfterEdit и BeforePost.
     
  3. valentofer

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    Спасибо, сделал с помощью хранимой процедуры.. Но это не совсем то что я хотел. Ведь данные поле Nach обновляется после нажатия на кнопку (Другого пока еще не придумал). Я же хочу что бы это поле автоматом пересчитывалось при изменении в поле KY. Тоесть пользователь ввел коэффициент, нажал еnter (Tab или просто мышкой щелкнул по др полю, вообщем ушел из редактируемой ячейки) и сразу пересчиталось ячейка в поле Nach. (аналог вычисляемого поля в ADO). События AfterEdit и BeforePost как то работают хз как)) Короче оно генерируется после редактирования, нажатия entera и перехода на 2 строки вниз... Чего так я нестал разбираться)) Может еще варианты есть?
     
  4. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    я может неправильно выразился, под хранимой процедурой я имел ввиду триггер для вашей таблицы с типом before update. Тогда перед изменением первых 2 значений расчитывается третье и в программной оболочке обновляется вся таблица целиком.
     
  5. valentofer

    valentofer Active Member

    Регистрация:
    10 ноя 2007
    Сообщения:
    38
    Симпатии:
    0
    Логично!) То что надо.. Спасибо!!
     
  6. perceptron

    perceptron Гость

    можно было сделать даже без тригера и хранимки:
    в одном поле набивают Зарплата (zp)
    в другом хранится КоэфУвелич(KY)
    Добавить в таблицу третье поле:

    ALTER TABLE dbo.MyTable
    ADD Nach AS [zp] * [KY]
    GO
     
Загрузка...

Поделиться этой страницей