Форум: "Базы";
Текущий архив: 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.46 MB
Время: 0.009 c