Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Вниз

Расскажите 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.038 c
14-78585
Esu
2002-10-01 20:55
2002.10.24
[Анти]киллер


14-78614
QUE
2002-10-03 14:01
2002.10.24
Пропали компаненты


3-78309
_VaaL_
2002-10-02 10:53
2002.10.24
Как запаролить програмно?


14-78653
Nox
2002-10-04 17:01
2002.10.24
Извините, люди, я, блин, больше не буду!


3-78257
BAY
2002-10-01 13:42
2002.10.24
Client





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский