![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как в run-time создать обработчик CalcFields [D6]
AlexA © (2004-03-04 15:42:00)Дело в следующем:
есть динамический запрос, напр select Field1, Field2 from Table. Необходимо в делфях создать вычисляемое поле.
Как создать поля я представляю. А как назначить выражение для вычесления. По выражения необходимо можно только узнать привыполнении приложении.
Другими словами как в run-time создать обработчик CalcFields.
Спасибо. извените за костноязычие.
AlexA (2004-03-04 16:49:00) [1]>kaif спасибо.. именно про "обратная польская запись" читаю..
про "скриптеры" ничего до этого не знал... еще раз спасибо, буду копать..
Соловьев (2004-03-04 16:42:00) [2]2 AlexA
А много полей и операций?
может есть смысл перебрать все варианты? и просто по условию выбирать нужны?
А какая СУБД? может действительно лучше SQL?
kaif (2004-03-04 16:31:00) [3]Тебе нужен не "рантайм-обработчик", а скриптер. То есть компонент, который может вычислять различные выражения, которые введет пользователь и использовать в качестве переменных значения полей (обращаться к полям). Поищи компоненты-скриптеры. Выбери себе такой компонент. Затем в обработчике OnCalcFields сделай вызов его метода (Evaluate или Exceute, в зависимости от компонента), передав в него выражение, которое пользователь задаст в известном синтаксисе и в обработчик (OnGetValue или аналогичный), который при разборе выражения обнаруживает неизвестные переменные и пытается их узнать из "внешнего мира" по их имени запиши код, при помощи которого можно будет добраться до значения полей (TField.Value) по их имени. Обычно скриптеры используют тип переменных Variant.
Я использую TScripter от Dream Controls. Но он платный. Есть и бесплатные компоненты-скриптеры. В конце концов можешь сам написать. Для этого можно разобраться в теории, как разбираются математические выражения (кажется это называлось обратная польская запись).
SPIRIT (2004-03-04 16:28:00) [4]
> AlexA © (04.03.04 16:23) [7]
пускай тогда пользователь и определяет какие поля делать вычисляемыми и в запросе их формировать
*
ибо не фиг
*
Mike Kouzmine (2004-03-04 16:25:00) [5]Не сложнее, а проще чем ты хочешь сделать.
AlexA (2004-03-04 16:23:00) [6]>Mike Kouzmine
Это вариант, я расматриваю.. неизвестно какие поля будут..., зависит от выбора пользователя... довольно таки сложно..
Mike Kouzmine (2004-03-04 16:19:00) [7]А что, в запросе нельзя вычислять эти поля?
SPIRIT (2004-03-04 16:17:00) [8]
> А я не знаю количество полей..
ну блин ... как так .. но что то же знаешь
AlexA (2004-03-04 16:16:00) [9]уважаемый Anatoly Podgoretsky , поясните пжл
AlexA (2004-03-04 16:14:00) [10]Что "бред"?? :)
А я не знаю количество полей..
Anatoly Podgoretsky (2004-03-04 16:01:00) [11]Обработчики создаются только в рантайм.
SPIRIT (2004-03-04 15:58:00) [12]завести переменные типа String - p1, p2, p3
и и после выполнения запроса передаешь их
в OnCalcFields
а там fieldbyname('p1').value:=fieldbyname('p2').value+fieldbyname('p3').value
естественно отключаешь OnCalcFields выполняешь запрос
и присваиваешь p1, p2, p3 имена полей.
включаешь
OnCalcFields
*написал и подумал: "БРЕД !!!!"*