Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычисляемое поле в IB/FB [D6, FireBird]


Дмитрий Калугин ©   (2002-08-22 15:05:00) 

Добрый день, Мастера!
Как по умному решить такую задачу?
При выборе валюты в прайсах на сетке должна пересчитаться цена.
Т.е. исходная цена (в $) должна умножиться на некий коэффициент,
который я вынимаю из таблицы курсов валют.
Я по быстрому сделал это так:

EngineDM.FullSkladIBQ.Close;
EngineDM.FullSkladIBQ.UnPrepare;
EngineDM.FullSkladIBQ.SQL.Strings[2]:=",PRICE_S*"+CurrToStr(EngineDM.KoeffToPrice)+" AS PRICE_S";
EngineDM.FullSkladIBQ.SQL.Strings[10]:=",SPRICE_S*"+CurrToStr(EngineDM.KoeffToPrice)+" AS SPRICE_S";
EngineDM.FullSkladIBQ.Prepare;
EngineDM.FullSkladIBQ.open;

Берется это из вьюхи в которой 70000 записей. После смены валюты
призодится подождать пока все это перезакачается по сети. Толрмозит короче 3-4сек. Компоненты не стандартные, а IBO. Как и где правильно сделать вычисляемое поле, подскажите? На вьюхе, на SQL запросе или на компоненте TIB_Grid? и как туда передавать этот коэффициент?
Такой фокус у меня не сработал.

SELECT Price_S * :koeff, ... FROM ...

Потом присваиваю так
EngineDM.FullSkladIBQ.ParamByName("koeff").AsFloat:=5.3;
ошибка, блин.


Дмитрий Калугин   (2002-08-23 11:05:00) [1]

>Desdechad
Покопался не там, но нашел!! Ура, конец тормозам!
Спасибо тебе ОГРОМНОЕ, ты натолкнул меня на давно забытое старое.
>Всего лишь обработку OnCalcField...


Desdechado   (2002-08-23 10:54:00) [2]

а есть там наследники от TField?
попробуй покопаться, может что-то в protected спрятано ...


Дмитрий Калугин   (2002-08-23 10:42:00) [3]

>Desdechado ©
Да, это самй умный вариант! Но компоненты у меня не стандартные, а IBO. А в них я не знаю как породить вычисляемое поле. :(


Дмитрий Калугин   (2002-08-23 10:35:00) [4]

>А вообще что такое FireBird ??? ... Ответ: SQL Server...
Отвечаю для Viacheslav. Я тоже "спал" до того как о нем узнал.
Теперь перешел на него сам.
По !!!РУССКИ!!! почитать можно тут www.ibase.ru
Это далеко продвинутый !!!БЕСПЛАТНЫЙ!!! Интербейс попросту говоря. Ребята из Фоеникса ( http://www.ibphoenix.com) взяли исходные тексты на сайте Борланда и начали его "очеловечивать". Есть еще обалденное средство "IB Expert" ( http://www.ibexpert.com/download), для визуального создания объектов БД для разработчиков.
Он совместим с интербейсом, лучше и бесплатный!


Viacheslav   (2002-08-22 23:21:00) [5]

А вообще что такое FireBird ??? Объясните непосвященному. Это компонент какой-то ????


Desdechado   (2002-08-22 16:41:00) [6]

имхо, лучше на клиенте делать CalculatedField. И ничего перезапрашивать не надо. Всего лишь обработку OnCalcField написать с коэффициентом относительно базовой валюты, считанной из БД


Дмитрий Калугин   (2002-08-22 16:34:00) [7]

>NickBat Я так понял задача узнать цену на СЕГОДНЯШНИЙ день?

Нет. Есть прайслист с болшим числом наименований продукции (прим 70тыс). Покупатели могут платить разной валютой. Да и шефу удобно смотреть его в разных валютах(переключаться) когда он заказ делает из нескольких стран, где свои бабки ходят...
Т.е. необходимо видеть один и тот же прайс в любой валюте по переключению. Курсы не меняются каждый день.


NickBat   (2002-08-22 15:44:00) [8]

Я так понял задача узнать цену на СЕГОДНЯШНИЙ день? Так этот курс один раз за день устанавливается или не так? Откуда там 70000 записей, если курсы всех валют за все дни, то первый раз за день вытяни этот курс, а потом подставляй из переменной. Или я что-то не так понял?


Val   (2002-08-22 15:14:00) [9]

советую сделать хп, возвращающую пересчитанную сумму(т.к. действие довольно частое), ее и подставлять в выборку.


Наверх

Титульная страница Поиск, карта сайта Написать письмо