![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с OnCalcFields
DelphiLexx © (2006-08-10 13:22:00)У меня при изменении значения поля Field3 должен вестись перерасчет двух других полей - Field1 и Field2.
Я разместил свой код в OnCalcFields, где и ведется перерасчет Field1 и Field2 на основании нового значения поля Field3.
Так вот как отловить именно тот момент когда в поле Filed3 будет уже новое значение, чтобы перерасчет был правильным.
Весь этот геморой из-за того, что OnCalcFields вызывается и в режиме вставки и врежиме редактирования и т.п.
DelphiLexx (2006-08-10 17:10:00) [1]
> книжку купил бы себе какую нить чтоль!
Книжек по Delphi перечитал очень много.
А что касается того, почему на первый взглядпростые вопросы я пишу на форум, что простые решенияне всегда эффективны. Вот поэтому и хочется послушать различные варианты людей которые сталкивались с подобной проблемой.
А проблему своя я решил через OnSetText поля Field3.
evvcom (2006-08-10 16:40:00) [2]> [12] DelphiLexx © (10.08.06 14:16)
Что же ты там такого считаешь, что заметно торможение? Поля у тебя действительно Calc? Или ты это к слову приплел? Потому как, насколько я помню, значения вычисляемых полей перед OnCalcFields сбрасываются, и ты их просто обязан присвоить. Потому значения либо каждый раз придется вычислять, либо завести массив и доставать оттуда. И с этим массивом еще один можно, с флагами "значение посчитано или нет". И в After(Before)Post флаг сбрасывать, если новое значение отличается от старого, как тебе и советовали.
> [13] Сергей М. © (10.08.06 14:21)
В BeforePost и AfterPost значения будут одинаковы, за исключением некоторых случаев с in/out параметрами. Запоминать в BeforeEdit ты, наверное, имел ввиду.
ORMADA (2006-08-10 15:12:00) [3]дарагой ты наш DelphiLexx
ты только недавно начал изучать дельфи ?
очень на это похоже!
книжку купил бы себе какую нить чтоль!
а то вижу ты любой мало мальский сложный вопрос задаёшь здесь вместо того чтобы порыться в хелпе
2 All
может сразу напишем ему всю его программу :)))))
Сергей М. (2006-08-10 14:28:00) [4]Тогда читай внимательно справку о событиях в НД, приводящих к возбуждению OnCalcFields
DelphiLexx (2006-08-10 14:23:00) [5]
>
> В BeforePost запоминай старое значение, в AfterPost сравнивай
> новое значение со старым
Мне кажется это извращение
Сергей М. (2006-08-10 14:21:00) [6]
> DelphiLexx © (10.08.06 14:16) [12]
В BeforePost запоминай старое значение, в AfterPost сравнивай новое значение со старым
DelphiLexx (2006-08-10 14:16:00) [7]
> Что мешает всякий раз при событии OnCalcFields выполнять
> нужные вычисления вне зависимости от того, изменилось ли
> значение интересующего поля ?
торможение
Сергей М. (2006-08-10 14:13:00) [8]Что мешает всякий раз при событии OnCalcFields выполнять нужные вычисления вне зависимости от того, изменилось ли значение интересующего поля ?
Плохиш (2006-08-10 14:12:00) [9]Кстати, всё, что описано в [8], никакого отношения к вычисляемым полям не имеет. Пора уже начать теорию учить.
Плохиш (2006-08-10 14:11:00) [10]
> DelphiLexx © (10.08.06 14:01) [8]
OnBeforePost
DelphiLexx (2006-08-10 14:01:00) [11]
> А как это соотносится с [3] ?
>
> К тому же зачем нужны все эти статусы. когда есть TField.
> OnSetText ?
Объяню просто, что мне нужно.
Пусть значение текущей записи(к примеру запись №2) поля Field3 = 37, пользователь изменяет значение на 36 и потдвержает сделанные изменения (нажатием Enter или ещё каким - либо способом), вот после этого должна вызваться моя процедура MyProcNewValue, которая изменит значения записи №2 полей Field1 и Field2 по формуле которая использует измененное значение поля Filed3 т.е. 36.
Так когда и где мне вызывать MyProcNewValue?
Сергей М. (2006-08-10 13:51:00) [12]
> DelphiLexx © (10.08.06 13:40) [6]
>
>
А как это соотносится с [3] ?
К тому же зачем нужны все эти статусы. когда есть TField.OnSetText ?
DelphiLexx (2006-08-10 13:40:00) [13]
> dataset.State in [dsBrowse]
dsBrowse - в OnCalcFields не вызывается
evvcom (2006-08-10 13:39:00) [14]> [2] Desdechado © (10.08.06 13:26)
В OnCalcFields DataSet.State = dsCalcFields, а уже после выхода возвращается к предыдущему состоянию (dsEdit, dsInsert или др.)
Сергей М. (2006-08-10 13:38:00) [15]dataset.State in [dsBrowse]
DelphiLexx (2006-08-10 13:33:00) [16]
> А ты сбрасывай его в nil при входе в те режимы, где "геморрой")
> .. А по выходу из режима восстанавливай предыд.значение
> ..
> <Цитата
А какой режим считается подтверждением нового значения Field3.
Desdechado (2006-08-10 13:26:00) [17]может, поставить проверку
if( dataset.State in[dsEdit,dsInsert]) then Exit;
Сергей М. (2006-08-10 13:25:00) [18]
> OnCalcFields вызывается и в режиме вставки и врежиме редактирования
А ты сбрасывай его в nil при входе в те режимы, где "геморрой") .. А по выходу из режима восстанавливай предыд.значение ..