Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.24;
Скачать: CL | DM;

Вниз

Расскажите plz как динамически добавлять ftCalculated - поле!   Найти похожие ветки 

 
BlackTiger   (2002-10-02 21:37) [0]

Люди, помогите! Расскажите как это делается.

Имею динамический запрос, т.е. не знаю даже, как будут называться поля, знаю только из последовательность.
Мне нужно над двумя последними произвести какую-нибудь операцию (например, вычесть одно из другого). А результат нужно показать в последней колонке (она и есть динамически добавляемая).

Никогда раньше такого не делал.


 
Val ©   (2002-10-02 21:56) [1]

1.если последовательность полей статическая, то обратиться можно по номеру.
a := Query.Fields[5].AsInteger - Query.Fields[6].AsInteger;
2.по созданию поля см. например TFloatField.Create.
3.только почему бы не сделать это в самом запросе?
select a,b, a-b as c
from mytable


 
MsGuns ©   (2002-10-02 22:10) [2]

>Val © (02.10.02 21:56)
Письмо получил, но ответить не успел. Спасибо ! Отвечу в ближайшие дни


 
MsGuns ©   (2002-10-02 22:17) [3]

>Val © (02.10.02 21:56)

if Query.FieldsCount>=then
a := Query.Fields[Query.FieldsCount-2].AsInteger -Query.Fields [Query.FieldsCount-2].AsInteger;

В этом случае статичность не нужна вовсе. Нужна только гарантия, что в этих полях числа и что есть СМЫСЛ в их разности. А вот в этом-то как раз я сильно сомневаюсь, не зная специфики стоящей задачи, структуры данных в БД и т.д.
Вообще, это все напоминает (да простит автор вопроса) известную поговорку про матроса, который "поматросит и бросит"


 
BlackTiger   (2002-10-02 23:00) [4]

Сколько не крутил "поматросил и бросил" - никак не смог применить к моему случаю. И нечего умничать про смысл. Если я спросил, значит смысл есть.
В самом запросе это сделать я не могу, т.к. ИМЕНА полей появляются ПОСЛЕ выполнения запроса (crosstab-перевертыш).
Пример в результате запроса (его параметры определяет сам пользователь) получается сумма реализации по магазинам (в строках) и годам (в КОЛОНКАХ). Ограничение - ДВА столбца для анализа. И мне нужно получить разницу (в сумме, в %) между ними. Зачем извращаться с запросом, когда эту разницу можно (да и нужно) получить уже на клиенте?
Я прошу как можно более полное руководство как это делается. Повторяю, это для меня новое, ТАКОГО я не делал раньше, а работал только со статичными колонками.
То, что в этом участвует "OnCalcField" я знаю, а вот что делать ДО и ПОСЛЕ, пока не понял. "Атака в лоб" не прошла.
Был бы очень признателен за примеры (шлите plz на мыло).


 
MsGuns ©   (2002-10-02 23:43) [5]

>BlackTiger (02.10.02 23:00)
Никто Вас обидеть не собирался. Просто вопрос был задан таким образом, что сложилось впечатление, что вот мол, пришел на фирму мол.человек (8-й за последние полтора года), ему дали задание что-то там выбрать для менеджеров или бухгалтера из существующей и работающей долго БД. Ему лень разбираться со структурой таблиц, связями и проч. Чего бы не сунуться к мастакам, может кто из них делал что-то подобное и кинут ценную мыслишку.

А с CrossTab`ами я вовсю работал, делая для бухгалтерии и не только отчеты типа журналов и шахматок. Так вот, ничего лучшего чем сканирование (перебор) записей и внутри по полям не придумал.
Впрочем, если это итоги, а не заполнение репорт-таблицы, то сканирование не нужно. Достаточно зачитать массив полевых описателей датасета и сложить SQL-запрос в TStrings`е, потом сунуть его в Query.SQL и Open (ExecSQL, если надо изменить, добавить или удалить)

С уважением.


 
MsGuns ©   (2002-10-02 23:51) [6]

На счет динамического добавления CalcFields в датасет. Нет ничего проще. Посмотрите методы TCustomDataSet и нисходящих по поводу добавления полей. Саму же формулу динамически создаете используя имена полей возвращаемого НД. (Св-ва TFeild)
Не надо пытаться все засунуть в SQL-запрос ! Это путь хоть и заманчивый, но вовсе не решающий все и вся



Страницы: 1 вся ветка

Текущий архив: 2002.10.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
4-78720
Gulliver
2002-09-11 12:54
2002.10.24
Как отловить блокировку и разблокировку экрана


1-78524
vasya_dvc
2002-10-13 20:28
2002.10.24
Точность никогда не бывает лишней


3-78248
Dorosh
2002-10-02 12:26
2002.10.24
Как добавить поле в таблицу?


7-78700
bob1906
2002-08-13 21:53
2002.10.24
Как объеденить два exe - файла в один, exe+exe=exe


14-78587
Delirium
2002-10-01 15:08
2002.10.24
Дайте ссылку на фотки с последней встречи в Москве