Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычислимые поля [D6, Paradox]


Юлия ©   (2002-11-26 17:16:00) 

В таблице 3 поля: pole1, pole2, pole3
Одно из полей - сумма двух других.
Как это реализовать?


ЮЮ   (2002-11-27 03:26:00) [1]

>но мне же нужно его еще и хранить
Зачем? Если его всегда можно посчитать, как на клиенте, так и в запросе!


Юлия   (2002-11-26 18:16:00) [2]

Exit: Спасибо, все получилось.
Mike-d: Тоже спасибо, но мне же нужно его еще и хранить...


mike-d   (2002-11-26 18:02:00) [3]

Пока писал ответ, еще накидали советов.
Девушка, купите книжку...


mike-d   (2002-11-26 18:01:00) [4]

Намудрили...

Воспользуйтесь Fields Editor (правая кнопка или двойной клик на TTable). Загоните туда (Add all fields) все поля вашей таблички. Затем (дай Бог терпения!) там же "New Field", придумайте ему название, тип, и отметьте, что оно вычисляемое.
Затем в обработчике таблице OnCalcFields напишите для него выражение вроде:
table1.FieldByName("pole3").AsInteger:= table1.FieldByname("pole1").AsInteger + table1.FieldByName("pole2").AsInteger;
И будете счастливы!..


exit   (2002-11-26 17:55:00) [5]

Если это Calculated field - OnCalcFiels

table1.FieldByName("pole3").AsInteger:=i+j;

И ни каких Edit и Post;
Если это обычное поле, но перед Post в нем должна вычислиться сумма чего-либо, BeforePost
И опять ни каких Edit и Post;


Виталий Панасенко   (2002-11-26 17:52:00) [6]

Для этого есть OnCalcFields


Юлия   (2002-11-26 17:51:00) [7]

Проблема немного в другом.
Когда это делать?
На форме лежит 3 DBEdit. Пользователь меняет значение, например, pole1. Когда нажимает кнопку "Применить" данные заносятся в таблицу. В это же время в pole3 должно меняться значение.
Это выглядит так:

i:=table1.FieldByname("pole1").AsInteger;
j:=table1.FieldByName("pole2").AsInteger;
table1.edit;
table1.FieldByName("pole3").AsInteger:=i+j;
table1.post;

По какому событию это должно происходить? Если AfterPost или что-то вроде этого, получается бесконечный цикл (рекурсия).
Что делать?


exit   (2002-11-26 17:44:00) [8]

2mike-d>Просто добавьте вычисляемое поле (calculated field)
Тоже вариант, но судя по вопросу, товарищ не в курсе.
Я так понимаю, имеется в виду Fields Collection компонентов TTable, TQuery... , где нужно сделать New Field, назначить его calculated... и т.д и т.п. ("ПРОСТО")


mike-d   (2002-11-26 17:39:00) [9]

Просто добавьте вычисляемое поле (calculated field)


exit   (2002-11-26 17:24:00) [10]

На уровне приложения:

TQuery.sql.add("Select pole1, pole2, (pole1+pole2) pole3 FROM my_table");

На уровне Paradox - увы.


exit   (2002-11-26 17:21:00) [11]

На уровне приложения или Paradox?


Наверх

Титульная страница Поиск, карта сайта Написать письмо