![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
А бывают гриды с КАЛЬКУЛИРУЕМЫМИ КОЛОНКАМИ? [D7, MSSQL]
BlackTiger © (2002-12-30 13:55:00)Я имею ввиду такую вэсч
Есть результат запроса (допустим, нехилый по времени выполнения).
Теперь пользователь должен иметь возможность получить колонку, содержащую какую-либо формулу по полям из результата, при этом формулу задает он сам.
Можно ли в какой-нибудь грид запихать новую колонку с формулой типа
xxDBGrid.Column["NewCalcColumn"].Formula := "[Field 1]+[Field 2]*100";
Здесь, конечно, нужны парсеры выражений.
Но может можно замутить аналог стандартными средствами?
Или сделать "запрос к запросу"?
Подскажите, если не трудно.
Reindeer Moss Eater (2002-12-31 11:21:00) [1]Ну и зачем бодягу с триггерами, СОМами прочей "крутой" ерундой, спрашивается?
Потому что в исходном вопросе приплетена бодяга про запросы, колонки и прочие "чернила для седьмого класса"
Johnmen (2002-12-31 11:06:00) [2]>BlackTiger (31.12.02 10:48)
Ну да, все верно, хороший ответ.
Хотел альтернатив ?
BlackTiger (2002-12-31 10:48:00) [3]2Johmmen: что тут грустного? посмотри на ответы, которые мне предлагали - вот это грустно...
"я знаю, а вам не скажу"
Тут и говорить-то особенно нечего. Проще пареной репы.
Рецепт:
1 TлюбоеQuery
1 любой DBGrid
n-ое количество fkCalculated-полей (добавляется при работе)
1 TfrParser из FastReport"а
1 TStringList для хранения характеристик колонок-формул
готовится ~1 час
Вот и все
А далее просто пишешь
"([Field 1] + [Field 2])*100" и получаешь результат.
Ну и зачем бодягу с триггерами, СОМами прочей "крутой" ерундой, спрашивается?
Johnmen (2002-12-31 09:20:00) [4]>BlackTiger (31.12.02 03:34)
Еще один разводильщик с растопыренными пальцами...Грустно...
>Я нашел очень красивое и простое решение
>без "заумностей", "умностей" и прочей ерунды
А самое "умное" - сказать "я знаю, а вам не скажу"...Причем при ответе на свой собственный вопрос :))))))))))))))))))))))))
dimis (2002-12-31 08:55:00) [5]
> Неееее, господа, в следующий раз я ОЧЧЧЧ глубоко подумаю,
> прежде чем искать совета тут. Особенно, когда такой флейм
> разводят по поводу пустяковой проблемы.
мое мнение, что господа сильно подумают прежде чем отвечать на твои вопросы
BlackTiger (2002-12-31 03:34:00) [6]:-)))
В который раз убеждаюсь, что русские программеры вырождаются!
Вы даже техзадание читать не умеете и искать подход к решению проблем. "Уметь программировать" <> "уметь разрабатывать".
Неееее, господа, в следующий раз я ОЧЧЧЧ глубоко подумаю, прежде чем искать совета тут. Особенно, когда такой флейм разводят по поводу пустяковой проблемы.
Я нашел очень красивое и простое решение без "заумностей", "умностей" и прочей ерунды. Вы бы еще предложили использовать распределенные вычисления и веб-сервисы!
TTCustomDelphiMaster (2002-12-30 17:47:00) [7]TField.OnGetText
passm (2002-12-30 17:37:00) [8]Пользуйся Excel"ом и будешь круче гор :))
Prooksius (2002-12-30 17:31:00) [9]> У него переполнение стека от большого ума.
Во-во, крутизна так и прет. Че же ты тогда спрашиваешь совета у нас, раз мы такие ламеры?
В твоей машине наверно и руль с 4-мя дырками под пальцы? :)
Delirium^.Tremens (2002-12-30 16:43:00) [10]ALL>
> Зачем задавать вопрос про гриды, "нехилый по времени запрос","возможность
> получить колонку ..." если все что тебе требуется - выполнять
> выражения, формируемые в рантайме?
У него переполнение стека от большого ума. Grid с Calculated колонками :-).
Reindeer Moss Eater (2002-12-30 16:37:00) [11]BlackTiger
Зачем задавать вопрос про гриды, "нехилый по времени запрос","возможность получить колонку ..." если все что тебе требуется - выполнять выражения, формируемые в рантайме?
BlackTiger (2002-12-30 16:34:00) [12]Хе-хе! МАСТЕРА, блин...
В FastReport есть свой крутой парсер (класс TfrParser).
Все что нужно!
Триггера, COM, ХП, таблицы!!! НА-ФИ-ГА городить ААААхренительный огород, когда все просто решается.
asmith (2002-12-30 15:02:00) [13]ИМНО это задача для сервера, а не клиента. Можно сделать так.
1. Задать в формулу в базе на MSSQL в поле типа text (если не хватает varchar(8000)) с учетом синтаксиса VBA
2. Написать триггер на нужную таблицу, который по нужному действию (обновление, вставка) прочитает нужные поля, создаст с помощью sp_OACreate COM-объект MS Script Control, передаст ему исходнык данные и выражение (формулу)
3. COM-объект сделает вычисления и занесет в нужное поле.
4. Можно такое действие вызывать не из триггера, а из хранимой процедуры, которая помимо обычных полей может в рекордсет добавить вычисленные значения.
Mike Kouzmine (2002-12-30 15:02:00) [14]sniknik - умный человек - снимаю шляпу.
sniknik (2002-12-30 14:57:00) [15]-Как мне безболезненно отрубить палец?
--(правильный ответ) обезболивающее.
--(неправильный)А может лутше вылечить?
-А разве заноза лечится????
--Лечится.
-Нет. Это очень большая заноза, вам не понять. Какое обезболивающее посоветуете?
вопрос понятный но почему не рассмотреть альтернативы? и с повторным SQL запросом вовсе неплохая идея, проще условия пожостче и размер и время заррузки уменьшится.
passm (2002-12-30 14:39:00) [16]BlackTiger (30.12.02 14:30)>
> ПОЛЬЗОВАТЕЛЬ САМ ОПРЕДЕЛЯЕТ ФОРМУЛУ
Перевести формулу, заданную пользователем, в SQL и подставить в заголовок?
> ЗАПРОС "ДОЛГОГО ВЫПОЛНЕНИЯ" и каждый раз его вызывать -
> "жирно будет"
:-\
dimis (2002-12-30 14:39:00) [17]IMHO
Excel-вот то что нужно(все остальное если и сущестувет, то существено дороже)
Выдавай в Excel и пускай там редактируют.
PS: не ругайся.
Mike Kouzmine (2002-12-30 14:37:00) [18]Пишешь парсер и на DataChange вешаешь пересчет и выводишь. Но это только для одной записи, если для всех, то создаешь кальк поле и обсчитываешь его в onCalcField. Парсеры есть в кладовке, помоему.
А на счет какие программисты Вам отвечают - это просто Ваш юношеский максимализм в Вас играет.
Каков вопрос - такой ответ.
passm (2002-12-30 14:35:00) [19]Может, так:
SELECT Q1.FIELD1, Q1.FIELD2, Q1.FIELD1 + Q1.FIELD2 * 100 AS FIELD3
FROM (SELECT (...) AS FIELD1, (...) AS FIELD2
FROM TABLE1 AS T1) AS Q1
Далее, если необходимо динамическое обновление, обрабатывать поля:
procedure Query1FIELD1.OnChange(Sender: TField);
begin
Query1FIELD3.Value:= Query1FIELD1.Value + Query1FIELD2.Value * 100
end;
Alexandr (2002-12-30 14:33:00) [20]1) Я все правильно прочитал и дал тебе правильные советы.
2) За вычислителем формул бегом на www.torry.net там этого как грязи, но прикручивать в DataSet будешь сам.
3) Универсального компонента, решающего полностью твою задачу нету.
4) Такого DB-парсера нету.
удачи.