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

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

Как отловить изменение значения в TTable


II ©   (2003-07-25 16:41:00) 

У меня есть три поля Kol,Cost,Summa.
Мне нужно при изменении Kol или Cost перещитывать поле Summa
Я повесил обработчик на AfterPost чтобы в нем делать следующие
TTable(DataSet).Edit;
TTable(DataSet).FiekdByName("Summa").AsFloat:=
TTable(DataSet).FiekdByName("Kol").AsInteger*
TTable(DataSet).FiekdByName("Cost").AsInteger;
TTable(DataSet).Post; - Вот этот обработчик зацикливается

А еще есть такая неприятность. При редактировании в гриде ячеки пост вызывается только когда я перехожу на следующую строку.

В итоге мне нужно при изменении значения поля пересчитать сумму. Я так понял AfterPost мне не поможет.
Мне кажется тут все просто только не знаю как. Ведь другие программы как то это делают.


Reindeer Moss Eater   (2003-07-25 17:48:00) [1]

Кроме событий у датасета есть еще события у TField. Обрати свое внимание на них.


II   (2003-07-25 17:37:00) [2]

А если полей 10 (1000) и юзер будет их всех по очереди редактировать?
Станешь постить 10 (1000) раз?

Ну полей у меня 5, а другого выхода я не вижу да это и не критично


Reindeer Moss Eater   (2003-07-25 17:06:00) [3]

надо было так?

TTable(DataSet).FiekdByName("Summa").Value:=
TTable(DataSet).FiekdByName("Kol").Value*
TTable(DataSet).FiekdByName("Cost").Value;


Можнобыло так

DataSet.FiekdByName("Summa").AsFloat:=
DataSet.FiekdByName("Kol").AsInteger:=
DataSet.FiekdByName("Cost").AsFloat:=


II   (2003-07-25 17:04:00) [4]

надо было так?

TTable(DataSet).FiekdByName("Summa").Value:=
TTable(DataSet).FiekdByName("Kol").Value*
TTable(DataSet).FiekdByName("Cost").Value;


Reindeer Moss Eater   (2003-07-25 17:04:00) [5]

Мне нужно его вызывать после нажатия энтера в редактируемом поле.
А как узнать когда это произошло не знаю


А если полей 10 (1000) и юзер будет их всех по очереди редактировать?
Станешь постить 10 (1000) раз?


II   (2003-07-25 17:02:00) [6]

2. "Этого" можно добиться не переходя к след. строке, вызвав метод Post;

Мне нужно его вызывать после нажатия энтера в редактируемом поле.
А как узнать когда это произошло не знаю


Reindeer Moss Eater   (2003-07-25 17:00:00) [7]

А что же делать чтобы это сробатывало после завершения редактирования(после энтера), а не после перехода на другую строку?

1. "Это" бы не потребовалось, если знать основы проектирования БД (первую нормальную форму)

2. "Этого" можно добиться не переходя к след. строке, вызвав метод Post;


Reindeer Moss Eater   (2003-07-25 17:00:00) [8]

а что неправильно с приведеним типов?

О Н О Л И Ш Н Е Е


II   (2003-07-25 16:58:00) [9]

На счет OnBeforePost, без Edit и Post я понял, все работает спасибо а что неправильно с приведеним типов?


Reindeer Moss Eater   (2003-07-25 16:57:00) [10]

Так непонятно изъясняюсь?
Надо было в OnBeforePost, без Edit и Post, и приведение типов - это лишнее.


II   (2003-07-25 16:56:00) [11]

А что же делать чтобы это сробатывало после завершения редактирования(после энтера), а не после перехода на другую строку?


II   (2003-07-25 16:54:00) [12]

А как надо было?


Reindeer Moss Eater   (2003-07-25 16:49:00) [13]

Кроме всего прочего, зачем тебе приведение типов потребовалось?


II   (2003-07-25 16:48:00) [14]

Я ожидал что, ктото подскажет как этого избежать


Reindeer Moss Eater   (2003-07-25 16:48:00) [15]

Перенеси все в OnBeforePost и убери оттудова Edit и Post


Reindeer Moss Eater   (2003-07-25 16:45:00) [16]

В обработчике AfterPost ты редактируешь запись и снова вызывается AfterPost.
Что же ты ожидал?


Наверх

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