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

Вниз

А бывают гриды с КАЛЬКУЛИРУЕМЫМИ КОЛОНКАМИ?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
3-72034
Fostr
2003-01-05 01:59
2003.01.23
Проблемка!


1-72379
Sectey
2003-01-13 10:36
2003.01.23
В Паскале ParamStr, а в Си?


3-72067
Rule
2003-01-06 12:35
2003.01.23
Уважаемые Мастера не могу разобраться с TIBQuery


1-72399
SinnerPro
2003-01-08 06:27
2003.01.23
Процессорное время...


8-72416
step[B.M.]
2002-10-07 11:53
2003.01.23
Надо писать звук со входа звуковой карты в mp3