![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить изменение значения в 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.
Что же ты ожидал?