Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.04.2008, 16:55
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию конвертирование данных + обновлени Grid

в таблице есть поле цена(Stoimost), которая выражается в рублях.
Поставил Checkbox, так чтобы при установке галочки цена выражалась в $. Что нада написать на OnClick чтобы записи в гриде обновились и приняли значение $ (т.е. Цена/25)?
Ответить с цитированием
  #2  
Старый 21.04.2008, 18:20
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

Создайте вычисляемое поле в наборе данных.
Потом два пути.
1. Показывать в DBGrid нужное поле и скрывать не нужное при нажатии на CheckBox.
2. Показывать только столбец вычисляемого поля. В событии набора данных onCalcField прописать условие - если CheckBox = true тогда показывать в рублях, если false то в долларах. И в процедуре переключения checkBox обновлять набор данных.
Ответить с цитированием
  #3  
Старый 22.04.2008, 14:28
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию

а мож ету процедурку изобразить?
Ответить с цитированием
  #4  
Старый 22.04.2008, 16:35
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

Не знаете что такое вычисляемые поля или не знаете как скрывать-отображать нужные поля? Или не то не то?
Ответить с цитированием
  #5  
Старый 22.04.2008, 17:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я бы сделал расчет в запросе (все-равно курс брать из БД) и выводил бы 2 поля, по необходимости у нужного ставил бы Visible в True, а у второго в False.

Типа что-то так:
Код:
fldPriceRUB.Visible := CheckBox1.Checked;
fldPriceUSD.Visible := Not CheckBox1.Checked;

fldPriceXXX - поле с ценой в RUB и USD соответсвенно (расчет в запросе с получением текущего курса из соотв. таблицы). Поля создаются даблкликом по таблице или квере, и там в попап меню что-то типа Add all fields.
CheckBox1 - тот самый чекбокс. В данном примере во вкл. состоянии - показывать в рублях, в выкл. - в долларях.
Ответить с цитированием
  #6  
Старый 22.04.2008, 18:16
Horror Horror вне форума
Прохожий
 
Регистрация: 16.04.2008
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Не знаете что такое вычисляемые поля или не знаете как скрывать-отображать нужные поля? Или не то не то?
как обновить?
как скрывать-отображать нужные поля?
Ответить с цитированием
  #7  
Старый 22.04.2008, 19:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Horror
как обновить?
как скрывать-отображать нужные поля?

Что обновить?
Как скрывать - я тебе написал.

Если ты считаешь суммы в запросе, то просто обновляешь запрос.

Запрос:
Код:
SELECT ID, Name, PriceRUB, PriceRUB / (SELECT Rate FROM XRate WHERE та-та-та выборка нужного курса) AS PriceUSD
FROM Goods

Выдает тебе ID, имя товара, его цену в руб и в долларях, получая курс из соотв. таблички XRate.

А в Дельфях на квере дважды щелкаешь и добавляешь все поля из запроса и настраиваешь у них св-во Visible. Когда ты так добавишь поля, то дельфя тебе создаст соответсвующие им атрибуты в форме, т.е. у тебя к ним будет доступ.
Ответить с цитированием
  #8  
Старый 22.04.2008, 22:59
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

Мне больше по душе 2-й вариант, что я выше писал.
Допустим создано вычисляемое поле sum. В вашей таблице есть поле summa, в котором записано значение в рублях.
В событии OnCalCField компонента Table пишем.
Код:
if CheckBox1.Checked then
ADOTable1.FieldByName('sum').AsCurrency:=ADOTable1.FieldByName('summa').AsCurrency*25
else
ADOTable1.FieldByName('sum').AsCurrency:=ADOTable1.FieldByName('summa').AsCurrency;

В событии OnClick CheckBox пишем.
Код:
ADOTable1.Close;
ADOTable1.Open;
Ответить с цитированием
  #9  
Старый 22.04.2008, 23:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не, у меня красивее получается. И курс можно брать хоть из базы, хоть извне. И переоткрывать не надо без нужны, а ну как у него там 1000 записей тянется? Пусть сервер работает
Ответить с цитированием
  #10  
Старый 23.04.2008, 11:32
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Не, у меня красивее получается. И курс можно брать хоть из базы, хоть извне. И переоткрывать не надо без нужны, а ну как у него там 1000 записей тянется? Пусть сервер работает
Точно. У вас классный вариант. Попробовал.
Только один момент. Там наверное все же знак умножения, а не деления.
Код:
SELECT ID, Name, PriceRUB, PriceRUB * (SELECT Rate FROM XRate WHERE та-та-та выборка нужного курса) AS PriceUSD
FROM Goods
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025