Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подмена данных отображения, Базы Данных 
:(
    Опции темы
zss
Дата 13.12.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



В JBuilderX есть компанент JdbTable. котоый работает с БД.

Он отображает данные БД, одно из полей которых BigDecimal. Это число представляет собой 4 байтное значение IP-адреса.
Если ничего не менять, то будут просто отображаться числа как они и хранятся в БД.

Можно ли в процессе отображения поймать момент когда происходит чтение данных таблицы для этого поля и подменить число на строку "xxx.xxx.xxx.xxx"

Какое сообщение нужно ловить и не будет ли конфликта с типами.
PM MAIL ICQ   Вверх
LSD
Дата 13.12.2005, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Есть несколько вариантов
  • определить для колонки свой painter и editor
  • создать cacl field, а реальное сделать невидимым, но тогда IP адрес нельзя будет редактировать



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
carper
Дата 14.12.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



Цитата(zss @ 13.12.2005, 21:49)
Можно ли в процессе отображения поймать момент когда происходит чтение данных таблицы для этого поля и подменить число на строку "xxx.xxx.xxx.xxx"


С JBuilderX не работал, но думаю, что самый простой выход уже в запросе получать число преобразованное в нужную строку. Например, в Oracle для этого можно написать небольшую хранимую процедурку, которую можно будет вставлять прямо в текст SQL запроса.

PS. И вообще, а какой философский смысл хранения IP адреса как одного числового поля?
IMHO разумнее хранить его либо в виде строки (распарсить ее на октеты (или преобразовать в число), в случае надобности, более чем просто) либо в виде 4-х отдельных полей - по полю на октет.

PM MAIL   Вверх
zss
Дата 14.12.2005, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(LSD @ 13.12.2005, 23:28)
создать cacl field, а реальное сделать невидимым, но тогда IP адрес нельзя будет редактировать


мне не нужно его редактировать - а так вроде подойдет



LSD, а можно подробнее - я не очень силен в Java
PM MAIL ICQ   Вверх
LSD
Дата 14.12.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Что-то типа такого (код полностью не тестил но принцип такой)
Код
QueryDataSet dataSet = new QueryDataSet();
dataSet.setQuery(new QueryDescriptor(database, "select * from v$version", null, true, Load.AS_NEEDED));
Column ipAdressColumn = new Column("IP_ADRESS", "IP адрес RAW", Variant.BIGDECIMAL);
ipAdressColumn.setVisible(TriStateProperty.FALSE);
Column ipFormatedColumn = new Column("IP_FORMATED", "IP адрес", Variant.STRING);
ipFormatedColumn.setVisible(TriStateProperty.TRUE);
ipFormatedColumn.setCalcType(CalcType.CALC);
dataSet.addColumn(ipAdressColumn);
dataSet.addColumn(ipFormatedColumn);
dataSet.addCalcFieldsListener(new IPField());

Код
  private static class IPField implements CalcFieldsListener
  {
    private DecimalFormat format = new DecimalFormat("000.000.000.000");
    
    public IPField()
    {
      DecimalFormatSymbols dfs = new DecimalFormatSymbols();
      dfs.setDecimalSeparator('.');
      format = new DecimalFormat("000.000.000.000", dfs);
    }
    
    public void calcFields(ReadRow readRow, DataRow dataRow, boolean _boolean)
    {
      BigDecimal ip = readRow.getBigDecimal("IP_ADRESS");
      dataRow.setString("IP_FORMATED", format.format(ip));
    }
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Andyb
Дата 14.12.2005, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 7.6.2004
Где: Lille, France

Репутация: 4
Всего: 5



jdbTable берет данные из queryDataSet в ней должна быть описана данная колонка(в сорсе как класс Column) вот для этой колонки можно поставить свойства displayMask и editMask
--------------------
 Большинство наших ошибок происходит из-за невнимательности.
PM ICQ   Вверх
zss
Дата 14.12.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



LSD, непонятно 3 вопроса

1. Что за тип CalcType.CALC
2. почему добавление происходит в dataSet
3. где связь между ipAdressColumn и ipFormatedColumn
PM MAIL ICQ   Вверх
LSD
Дата 14.12.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(zss @ 14.12.2005, 11:33)
1. Что за тип CalcType.CALC

Это интерфейс который содержит типы столбцов, калькулируемое, обычное или агрегатное.

Цитата(zss @ 14.12.2005, 11:33)
2. почему добавление происходит в dataSet

Потому что это добавление новых данных, а не просто изменение отображения.

Цитата(zss @ 14.12.2005, 11:33)
3. где связь между ipAdressColumn и ipFormatedColumn

Это реализуется в классе IPField. Он кстати неправильно реализует преобразование.


Цитата(Andyb @ 14.12.2005, 11:32)
jdbTable берет данные из queryDataSet в ней должна быть описана данная колонка(в сорсе как класс Column) вот для этой колонки можно поставить свойства displayMask и editMask

Нет, это не прокатит. Там нужно работать с байтами, простым форматированием не обойтись.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0808 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.