Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как в 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

*написал и подумал: "БРЕД !!!!"*


Наверх

Титульная страница Поиск, карта сайта Написать письмо