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

valentofer

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

nayke

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

valentofer

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

nayke

Well-known member
04.08.2010
310
0
#4
Спасибо, сделал с помощью хранимой процедуры.. Но это не совсем то что я хотел. Ведь данные поле Nach обновляется после нажатия на кнопку (Другого пока еще не придумал). Я же хочу что бы это поле автоматом пересчитывалось при изменении в поле KY. Тоесть пользователь ввел коэффициент, нажал еnter (Tab или просто мышкой щелкнул по др полю, вообщем ушел из редактируемой ячейки) и сразу пересчиталось ячейка в поле Nach. (аналог вычисляемого поля в ADO). События AfterEdit и BeforePost как то работают хз как)) Короче оно генерируется после редактирования, нажатия entera и перехода на 2 строки вниз... Чего так я нестал разбираться)) Может еще варианты есть?
я может неправильно выразился, под хранимой процедурой я имел ввиду триггер для вашей таблицы с типом before update. Тогда перед изменением первых 2 значений расчитывается третье и в программной оболочке обновляется вся таблица целиком.
 
P

perceptron

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

ALTER TABLE dbo.MyTable
ADD Nach AS [zp] * [KY]
GO