Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-72032
Basil
2003-01-03 18:35
2003.01.23
Принцип работы


14-72491
Дядя Билли
2003-01-06 01:01
2003.01.23
Ищу компонент


1-72289
shok
2003-01-15 09:34
2003.01.23
password


1-72228
Джин
2003-01-14 15:31
2003.01.23
Создание компонент


3-72158
Vovkin
2002-12-27 20:28
2003.01.23
dbExpress + Delphi 7 + MSSQL 2000





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский