Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.21;
Скачать: CL | DM;

Вниз

Как отловить изменение значения в TTable   Найти похожие ветки 

 
II   (2003-07-25 16:41) [0]

У меня есть три поля 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 16:45) [1]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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

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


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

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

О Н О Л И Ш Н Е Е


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

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

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


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

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

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


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

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


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


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

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

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:37) [15]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2003.08.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-68156
diokant
2003-07-29 12:46
2003.08.21
Cобытия ComboBox, который находится в DBGrid


14-68538
Hydra
2003-08-05 06:21
2003.08.21
Лечение зубчиков


6-68423
prorok2
2003-06-16 10:07
2003.08.21
Сохранение текстового файла


3-68148
iont
2003-07-25 04:23
2003.08.21
Динамическое создание БД


1-68396
S@shka
2003-08-07 13:58
2003.08.21
Потоки и глобальные переменные