Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизПроблемы с 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c