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

Вниз

Проблемы с OnCalcFields   Найти похожие ветки 

 
DelphiLexx ©   (2006-08-10 13:22) [0]

У меня при изменении значения поля Field3 должен вестись перерасчет двух других полей - Field1 и Field2.
Я разместил свой код в OnCalcFields, где и ведется перерасчет Field1 и Field2 на основании нового значения поля Field3.
Так вот как отловить именно тот момент когда в поле Filed3 будет уже новое значение, чтобы перерасчет был правильным.
Весь этот геморой из-за того, что OnCalcFields вызывается и в режиме вставки и врежиме редактирования и т.п.


 
Сергей М. ©   (2006-08-10 13:25) [1]


> OnCalcFields вызывается и в режиме вставки и врежиме редактирования


А ты сбрасывай его в nil при входе в те режимы, где "геморрой") .. А по выходу из режима восстанавливай предыд.значение ..


 
Desdechado ©   (2006-08-10 13:26) [2]

может, поставить проверку
if( dataset.State in[dsEdit,dsInsert]) then Exit;


 
DelphiLexx ©   (2006-08-10 13:33) [3]


> А ты сбрасывай его в nil при входе в те режимы, где "геморрой")
> .. А по выходу из режима восстанавливай предыд.значение
> ..
> <Цитата

А какой режим считается подтверждением нового значения Field3.


 
Сергей М. ©   (2006-08-10 13:38) [4]

dataset.State in [dsBrowse]


 
evvcom ©   (2006-08-10 13:39) [5]

> [2] Desdechado ©   (10.08.06 13:26)

В OnCalcFields DataSet.State = dsCalcFields, а уже после выхода возвращается к предыдущему состоянию (dsEdit, dsInsert или др.)


 
DelphiLexx ©   (2006-08-10 13:40) [6]


> dataset.State in [dsBrowse]

dsBrowse - в OnCalcFields не вызывается


 
Сергей М. ©   (2006-08-10 13:51) [7]


> DelphiLexx ©   (10.08.06 13:40) [6]
>
>


А как это соотносится с [3] ?

К тому же зачем нужны все эти статусы. когда есть TField.OnSetText ?


 
DelphiLexx ©   (2006-08-10 14:01) [8]


> А как это соотносится с [3] ?
>
> К тому же зачем нужны все эти статусы. когда есть TField.
> OnSetText ?

Объяню просто, что мне нужно.
Пусть значение текущей записи(к примеру запись №2) поля Field3 = 37, пользователь изменяет значение на 36 и потдвержает сделанные изменения (нажатием Enter или ещё каким - либо способом), вот после этого должна вызваться моя процедура MyProcNewValue, которая изменит значения записи №2 полей Field1 и Field2 по формуле которая использует измененное значение поля Filed3 т.е. 36.
Так когда и где мне вызывать MyProcNewValue?


 
Плохиш ©   (2006-08-10 14:11) [9]


> DelphiLexx ©   (10.08.06 14:01) [8]

OnBeforePost


 
Плохиш ©   (2006-08-10 14:12) [10]

Кстати, всё, что описано в [8], никакого отношения к вычисляемым полям не имеет. Пора уже начать теорию учить.


 
Сергей М. ©   (2006-08-10 14:13) [11]

Что мешает всякий раз при событии OnCalcFields выполнять нужные вычисления вне зависимости от того, изменилось ли значение интересующего поля ?


 
DelphiLexx ©   (2006-08-10 14:16) [12]


> Что мешает всякий раз при событии OnCalcFields выполнять
> нужные вычисления вне зависимости от того, изменилось ли
> значение интересующего поля ?

торможение


 
Сергей М. ©   (2006-08-10 14:21) [13]


> DelphiLexx ©   (10.08.06 14:16) [12]


В BeforePost запоминай старое значение, в AfterPost сравнивай новое значение со старым


 
DelphiLexx ©   (2006-08-10 14:23) [14]


>
> В BeforePost запоминай старое значение, в AfterPost сравнивай
> новое значение со старым

Мне кажется это извращение


 
Сергей М. ©   (2006-08-10 14:28) [15]

Тогда читай внимательно справку о событиях в НД, приводящих к возбуждению OnCalcFields


 
ORMADA ©   (2006-08-10 15:12) [16]

дарагой ты наш DelphiLexx
ты только недавно начал изучать дельфи ?
очень на это похоже!
книжку купил бы себе какую нить чтоль!
а то вижу ты любой мало мальский сложный вопрос задаёшь здесь вместо того чтобы порыться в хелпе
2 All
может сразу напишем ему всю его программу :)))))


 
evvcom ©   (2006-08-10 16:40) [17]

> [12] DelphiLexx ©   (10.08.06 14:16)

Что же ты там такого считаешь, что заметно торможение? Поля у тебя действительно Calc? Или ты это к слову приплел? Потому как, насколько я помню, значения вычисляемых полей перед OnCalcFields сбрасываются, и ты их просто обязан присвоить. Потому значения либо каждый раз придется вычислять, либо завести массив и доставать оттуда. И с этим массивом еще один можно, с флагами "значение посчитано или нет". И в After(Before)Post флаг сбрасывать, если новое значение отличается от старого, как тебе и советовали.

> [13] Сергей М. ©   (10.08.06 14:21)

В BeforePost и AfterPost значения будут одинаковы, за исключением некоторых случаев с in/out параметрами. Запоминать в BeforeEdit ты, наверное, имел ввиду.


 
DelphiLexx ©   (2006-08-10 17:10) [18]


> книжку купил бы себе какую нить чтоль!

Книжек по Delphi перечитал очень много.
А что касается того, почему на первый взгляд простые вопросы я пишу на форум, что простые решения не всегда эффективны. Вот поэтому и хочется послушать различные варианты людей которые сталкивались с подобной проблемой.
А проблему своя я решил через OnSetText поля Field3.



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

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

Наверх




Память: 0.51 MB
Время: 0.029 c
4-1141971209
balepa
2006-03-10 09:13
2006.09.24
Процессы и сокеты


15-1157178804
Yeg
2006-09-02 10:33
2006.09.24
Перемещение кота из сельской местности в город


15-1157207050
Zeqfreed
2006-09-02 18:24
2006.09.24
Проблема с жестким диском


15-1157208021
santey
2006-09-02 18:40
2006.09.24
сохранение структуры(записи)


15-1157088870
Ega23
2006-09-01 09:34
2006.09.24
С Днём рождения! 1 сентября