Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-62070
Sirruf
2003-12-09 12:32
2003.12.19
TShellComboBox


3-61943
Inkotex
2003-11-26 19:31
2003.12.19
SQL


11-61995
it
2003-04-07 15:46
2003.12.19
From OpenDialog To ListBox


7-62286
PolarS
2003-10-13 19:17
2003.12.19
Не вызывается метод из Rapi.dll


7-62305
SKing
2003-10-14 14:10
2003.12.19
INI файл - ограничения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский