![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnCalcFields & edit [D6, IB6.x]
ramdy © (2003-10-13 15:21:00)
В событии OnCalcFields надо изменить data-поле.
Но, когда мы делаем Query.Edit - срабатывает новый OnCalcFields и изменить мы, увы, уже ничего не можем.
Скажите пожалуйста - как правильно эту проблему решать?
ramdy (2003-10-14 17:39:00) [1]
Кстати, если кому интересно...
Методы типа
if not (DataSet.state in [dsInsert, dsEdite]) do
не работают, потому-что в OnCalcFields состояние dataset"а dsCalcFields.
Anatoly Podgoretsky (2003-10-14 11:35:00) [2]
Здесь вообще не видать расчетных полей. Как сказали делай отдельным запросом, например по таймеру.
ramdy (2003-10-14 11:29:00) [3]
Всем спасибо. То что надо.
Izyum (2003-10-14 10:13:00) [4]
Если нужно, чтоб вычесляемые поля не пересчитывались во время редактирования, пишешь:
if not ( DataSet.state in [dsInsert, dsEdite]) do ...
stud (2003-10-14 10:09:00) [5]
а зачем здесь вообще вычисляемые поля?? если нужно проверять время - наверное лучше использовать таймер? и с помощью sql например, менять нужное значение например: update table set flag=1 where time_zak-"now"<n and flag<>1 что-то вроде такого
Step[B.M.] (2003-10-13 20:18:00) [6]
1. Это можно проделывать процедурой.
2. B OnCalcFields пишем примерно:
Если (запись Query НЕ редактитуется) то Mеняем flag;
ramdy (2003-10-13 15:43:00) [7]
Задача!
Грубо :)
Есть поля id|time_zak|flag
Есть заказы - "критические", у них flag=1. Есть некритические - flag=0;
Время исполнения заказа - time_zak.
Есть 2 гридера - в одном критические заказы "....where flag=1", в другом некритические "....where flag=0".
В событии oncalc смотрю time - now(). Если time_zak-now()<N - переводим заказ из некритического в критические. Т. е. меняем flag с 0 на 1.
Как эту замечательную идею правильнореализовать. Ведь наверняка есть какое-то классическое решение.
stud (2003-10-13 15:25:00) [8]
не надо делать это поле вычисляемым и к тому же обрабатывать его в oncalcfields. просто подробнее опиши задачу