Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.19;
Скачать: CL | DM;

Вниз

Как отобразить расчетное значение без обновления НД?   Найти похожие ветки 

 
Denis ©   (2003-11-27 15:19) [0]

Здравствуйте.
Не могу придумать, как решить следующую задачу:
выполняем некоторый запрос, возвращающий поля А, В, С,
причем поле С - рассчетное: С=А*В.
Пользователь редактирует данные.
Например при нажатии Enter в поле В, пересчитывается величина С.
Необходимо, чтобы рассчитанное по введенным данным значение С отобразилось в гриде без обновления НД.

Я не знаю как это корректно сделать.
Одна из моих попыток:

procedure TfmKontrDs.dbgOplataRKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
tbOplataR.FieldByName("SumNDS").asfloat:=(tboplata.FieldByname("sumza").AsFloat*tbOplataR.fieldbyname("kolvo").AsFloat * 1.2);
tbOplataR.FieldByName("tovarden").asfloat:=(tboplata.FieldByname("sumza").AsFloat*tbOplataR.fieldbyname("tovar").asFloat );

end;
end;


Помогите, пожалуйста...


 
HSolo ©   (2003-11-27 15:21) [1]

Сделайте Calculated поле и считайте не на сервере, а на клиенте


 
Denis ©   (2003-11-27 15:41) [2]

Спасибо за совет, все получилось.


 
Denis ©   (2003-11-27 16:05) [3]

Мне прийдется вернуться к этой теме.
Извиняюсь за некорректную первоначальную постановку вопроса.
Нужно отображать расчетные данные и во вновь добавляемой записи.
Посмотрите на запрос:

select
(:sumza) as sum, *
from
posdengi
where
([kod zak] = :"kod zak")
and ([num poz] = :"num pos")


Поле sum нельзя изменять в гриде, но оно участвует в вычислениях.
Кто-нибудь что-нибудь подскажет?


 
HSolo ©   (2003-11-27 16:54) [4]

Во вновь добавляемой записи calculated-поле отразится точно так же, как в редактируемой. Только правильно пропишите его расчет в OnCalcFields
Или я чего-то недопонимаю?


 
Vemer ©   (2003-11-27 18:40) [5]

Denis, а ты не путаешь обычное вычисляемое поле в DATASET с вычислениями в запросе?
В твоем случае в запросе не должно быть вычислении, только исходные данные, а все расчеты будет делать Calculated поле в программе, а оно будет работать всегда, и на старых записях, и на новых (деление на 0 и т.п. не в счет), лишь бы данные были.


 
Denis ©   (2003-11-28 08:48) [6]


> Vemer © (27.11.03 18:40) [5]

Я может неправильно выражаюсь, но ничего не путаю. Я говорю, что в запрос передается параметр ":sumza", который затем отображается в новом поле "sum" и (вы правы) уже в DATASET учавствует в вычислениях: ~ CalcField= Field1*sum + Field2*sum.
При изменении полей уже существующих записей все прекрасно пересчитывается, но при добавлении новой записи значение поля "sum" равно null. Естественно, CalcField не считается.
Сейчас я прописываю значение в поле sum, чтобы рассчитать CalcField: tbOplataR.FieldByName("sum").AsFloat:=...
Есть ли возможность сделать так, чтобы sum заполнялось автоматически?
При программном заполнении в моем случае нужна реализация возможности отката и еще куча громоздких примочек. Вот я и ищу более легкий путь...


 
Denis ©   (2003-11-28 09:08) [7]

Ну вот, в последней версии tbOplataR.FieldByName("sum").AsFloat:=... уже не проходит, опять ругается что его нельзя модифицировать... а жаль.


 
HSolo ©   (2003-11-28 10:02) [8]

Т.е. значение поля sum для всей выборки одинаково?
Если это так, то:
- обязательно ли светить его в гриде, может, лучше где-нибудь рядом, в label, к примеру
- Вы берете откуда-то это значение и передаете его запросу как параметр. Так? Так пусть CalcField берет его оттуда же


 
Vemer ©   (2003-11-28 10:32) [9]

Тут рядом лежит ветка, в которой куча замечательных примеров подсчета суммы колонок и т. п., в том числе и без open/close. Рекомендую посмотреть, наверняка что-то полезное найдется.


 
Johnmen ©   (2003-11-28 10:48) [10]

>Denis ©

Просто тебе надо выкинуть (:sumza) as sum из запроса. Это, мягко говоря, не очень ... :)
И добавить вычисляемое поле в набор данных, получаемый запросом.


 
Denis ©   (2003-11-28 11:22) [11]


> HSolo © (28.11.03 10:02) [8]


> Johnmen © (28.11.03 10:48) [10]


Уже понял что это "не очень".
Вот как раз я сейчас и передал в CalcField это sum просто ссылкой на значение поля главной таблицы.
Опять же, в который раз мораль: просто нужно думать, думать, думать... :)

Спасибо за потраченное на меня время



Страницы: 1 вся ветка

Текущий архив: 2003.12.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
1-62144
NONAME
2003-12-07 18:40
2003.12.19
Подскажите! Rак сделать некоторый SCORE.dat файл с не читаемой в


1-62149
WolfGun
2003-12-09 13:46
2003.12.19
Сохранение формы в bmp.


1-61998
smu
2003-12-09 08:46
2003.12.19
Как организовать удаленное обновление приложения?


3-61930
mari
2003-11-27 10:01
2003.12.19
добавление записей в таблицу


14-62224
Jack
2003-11-26 12:45
2003.12.19
IIS и Jakarta-Tomkat