Форум: "Базы";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
Вниз
Как отобразить расчетное значение без обновления НД? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c