Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизА бывают гриды с КАЛЬКУЛИРУЕМЫМИ КОЛОНКАМИ? Найти похожие ветки
← →
BlackTiger (2002-12-30 13:55) [0]Я имею ввиду такую вэсч
Есть результат запроса (допустим, нехилый по времени выполнения).
Теперь пользователь должен иметь возможность получить колонку, содержащую какую-либо формулу по полям из результата, при этом формулу задает он сам.
Можно ли в какой-нибудь грид запихать новую колонку с формулой типа
xxDBGrid.Column["NewCalcColumn"].Formula := "[Field 1]+[Field 2]*100";
Здесь, конечно, нужны парсеры выражений.
Но может можно замутить аналог стандартными средствами?
Или сделать "запрос к запросу"?
Подскажите, если не трудно.
← →
Delirium^.Tremens (2002-12-30 13:58) [1]двойной клик на ..DataSet.. NEW - Calculated
← →
Alexandr (2002-12-30 14:00) [2]1) Грид только отображает данные.
2) Данные беруться у DataSet к которому через dataSource привязан твой грид
3) У dataSet есть вычисляемые поля.
4) Для вычисляемого поля можно прикрутить вычислитель формул.
5) Если данные долго выбираются, а нужны постояно , т.е. часто обновлять их нет необходимости, то их можно временно хранить в другой таблице - хоть в БД, хоть локально в каком-нибудь TMemTable.
← →
Alexandr (2002-12-30 14:01) [3]6) Лучший грид - excel
← →
asmith (2002-12-30 14:05) [4]MSSQL сам позволяет создавать вычисляемые поля при, см. BOL, CREATE TABLE
← →
sniknik (2002-12-30 14:08) [5]В самом MSSQL можно кальк поле сделать
CREATE TABLE mytable
(
low int,
high int,
myavg AS (low + high)/2
)
не пойдет?
← →
Alexandr (2002-12-30 14:09) [6]вы исходный пост читали?
Вникли в суть вопроса?
А чего ж тогда ерунду всякую пишете?
← →
dimis (2002-12-30 14:15) [7]в этом случае проше всего самому составлять запрос
(SQL.ADD)
проблема мне видится в том чтобы пользователю было удобно вводить формулы
← →
BlackTiger (2002-12-30 14:30) [8]Эхххх, господа, господа...
Вы анализ проекта и техзадание тоже так же читаете?
Если да, то какие вы нафиг программеры! (Никого не хочу обидеть, но посту не-по-делу)
Есть ДВА условия
1. ПОЛЬЗОВАТЕЛЬ САМ ОПРЕДЕЛЯЕТ ФОРМУЛУ
2. ЗАПРОС "ДОЛГОГО ВЫПОЛНЕНИЯ" и каждый раз его вызывать - "жирно будет"
Я хочу использовать fkCalculated, но формулу задавать ДИНАМИЧЕСКИ (как ее передать - это другой вопрос).
Интересно, а вот есть ли такие DB-парсеры (freeware, желательно), которым можно передать Fields текущей записи и текст формулы, а они вернут мне результат?
← →
Alexandr (2002-12-30 14:33) [9]1) Я все правильно прочитал и дал тебе правильные советы.
2) За вычислителем формул бегом на www.torry.net там этого как грязи, но прикручивать в DataSet будешь сам.
3) Универсального компонента, решающего полностью твою задачу нету.
4) Такого DB-парсера нету.
удачи.
← →
passm (2002-12-30 14:35) [10]Может, так:
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;
← →
Mike Kouzmine (2002-12-30 14:37) [11]Пишешь парсер и на DataChange вешаешь пересчет и выводишь. Но это только для одной записи, если для всех, то создаешь кальк поле и обсчитываешь его в onCalcField. Парсеры есть в кладовке, помоему.
А на счет какие программисты Вам отвечают - это просто Ваш юношеский максимализм в Вас играет.
Каков вопрос - такой ответ.
← →
dimis (2002-12-30 14:39) [12]IMHO
Excel-вот то что нужно(все остальное если и сущестувет, то существено дороже)
Выдавай в Excel и пускай там редактируют.
PS: не ругайся.
← →
passm (2002-12-30 14:39) [13]BlackTiger (30.12.02 14:30)>
> ПОЛЬЗОВАТЕЛЬ САМ ОПРЕДЕЛЯЕТ ФОРМУЛУ
Перевести формулу, заданную пользователем, в SQL и подставить в заголовок?
> ЗАПРОС "ДОЛГОГО ВЫПОЛНЕНИЯ" и каждый раз его вызывать -
> "жирно будет"
:-\
← →
sniknik (2002-12-30 14:57) [14]-Как мне безболезненно отрубить палец?
--(правильный ответ) обезболивающее.
--(неправильный)А может лутше вылечить?
-А разве заноза лечится????
--Лечится.
-Нет. Это очень большая заноза, вам не понять. Какое обезболивающее посоветуете?
вопрос понятный но почему не рассмотреть альтернативы? и с повторным SQL запросом вовсе неплохая идея, проще условия пожостче и размер и время заррузки уменьшится.
← →
asmith (2002-12-30 15:02) [15]ИМНО это задача для сервера, а не клиента. Можно сделать так.
1. Задать в формулу в базе на MSSQL в поле типа text (если не хватает varchar(8000)) с учетом синтаксиса VBA
2. Написать триггер на нужную таблицу, который по нужному действию (обновление, вставка) прочитает нужные поля, создаст с помощью sp_OACreate COM-объект MS Script Control, передаст ему исходнык данные и выражение (формулу)
3. COM-объект сделает вычисления и занесет в нужное поле.
4. Можно такое действие вызывать не из триггера, а из хранимой процедуры, которая помимо обычных полей может в рекордсет добавить вычисленные значения.
← →
Mike Kouzmine (2002-12-30 15:02) [16]sniknik - умный человек - снимаю шляпу.
← →
BlackTiger (2002-12-30 16:34) [17]Хе-хе! МАСТЕРА, блин...
В FastReport есть свой крутой парсер (класс TfrParser).
Все что нужно!
Триггера, COM, ХП, таблицы!!! НА-ФИ-ГА городить ААААхренительный огород, когда все просто решается.
← →
Reindeer Moss Eater (2002-12-30 16:37) [18]BlackTiger
Зачем задавать вопрос про гриды, "нехилый по времени запрос","возможность получить колонку ..." если все что тебе требуется - выполнять выражения, формируемые в рантайме?
← →
Delirium^.Tremens (2002-12-30 16:43) [19]ALL>
> Зачем задавать вопрос про гриды, "нехилый по времени запрос","возможность
> получить колонку ..." если все что тебе требуется - выполнять
> выражения, формируемые в рантайме?
У него переполнение стека от большого ума. Grid с Calculated колонками :-).
← →
Prooksius (2002-12-30 17:31) [20]> У него переполнение стека от большого ума.
Во-во, крутизна так и прет. Че же ты тогда спрашиваешь совета у нас, раз мы такие ламеры?
В твоей машине наверно и руль с 4-мя дырками под пальцы? :)
← →
passm (2002-12-30 17:37) [21]Пользуйся Excel"ом и будешь круче гор :))
← →
TTCustomDelphiMaster (2002-12-30 17:47) [22]TField.OnGetText
← →
BlackTiger (2002-12-31 03:34) [23]:-)))
В который раз убеждаюсь, что русские программеры вырождаются!
Вы даже техзадание читать не умеете и искать подход к решению проблем. "Уметь программировать" <> "уметь разрабатывать".
Неееее, господа, в следующий раз я ОЧЧЧЧ глубоко подумаю, прежде чем искать совета тут. Особенно, когда такой флейм разводят по поводу пустяковой проблемы.
Я нашел очень красивое и простое решение без "заумностей", "умностей" и прочей ерунды. Вы бы еще предложили использовать распределенные вычисления и веб-сервисы!
← →
dimis (2002-12-31 08:55) [24]
> Неееее, господа, в следующий раз я ОЧЧЧЧ глубоко подумаю,
> прежде чем искать совета тут. Особенно, когда такой флейм
> разводят по поводу пустяковой проблемы.
мое мнение, что господа сильно подумают прежде чем отвечать на твои вопросы
← →
Johnmen (2002-12-31 09:20) [25]>BlackTiger (31.12.02 03:34)
Еще один разводильщик с растопыренными пальцами...Грустно...
>Я нашел очень красивое и простое решение
>без "заумностей", "умностей" и прочей ерунды
А самое "умное" - сказать "я знаю, а вам не скажу"...Причем при ответе на свой собственный вопрос :))))))))))))))))))))))))
← →
BlackTiger (2002-12-31 10:48) [26]2Johmmen: что тут грустного? посмотри на ответы, которые мне предлагали - вот это грустно...
"я знаю, а вам не скажу"
Тут и говорить-то особенно нечего. Проще пареной репы.
Рецепт:
1 TлюбоеQuery
1 любой DBGrid
n-ое количество fkCalculated-полей (добавляется при работе)
1 TfrParser из FastReport"а
1 TStringList для хранения характеристик колонок-формул
готовится ~1 час
Вот и все
А далее просто пишешь
"([Field 1] + [Field 2])*100" и получаешь результат.
Ну и зачем бодягу с триггерами, СОМами прочей "крутой" ерундой, спрашивается?
← →
Johnmen (2002-12-31 11:06) [27]>BlackTiger (31.12.02 10:48)
Ну да, все верно, хороший ответ.
Хотел альтернатив ?
← →
Reindeer Moss Eater (2002-12-31 11:21) [28]Ну и зачем бодягу с триггерами, СОМами прочей "крутой" ерундой, спрашивается?
Потому что в исходном вопросе приплетена бодяга про запросы, колонки и прочие "чернила для седьмого класса"
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.007 c