Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Подмена данных отображения |
Автор: zss 13.12.2005, 21:49 |
В JBuilderX есть компанент JdbTable. котоый работает с БД. Он отображает данные БД, одно из полей которых BigDecimal. Это число представляет собой 4 байтное значение IP-адреса. Если ничего не менять, то будут просто отображаться числа как они и хранятся в БД. Можно ли в процессе отображения поймать момент когда происходит чтение данных таблицы для этого поля и подменить число на строку "xxx.xxx.xxx.xxx" Какое сообщение нужно ловить и не будет ли конфликта с типами. |
Автор: LSD 13.12.2005, 23:28 |
Есть несколько вариантов
|
Автор: carper 14.12.2005, 09:36 | ||
С JBuilderX не работал, но думаю, что самый простой выход уже в запросе получать число преобразованное в нужную строку. Например, в Oracle для этого можно написать небольшую хранимую процедурку, которую можно будет вставлять прямо в текст SQL запроса. PS. И вообще, а какой философский смысл хранения IP адреса как одного числового поля? IMHO разумнее хранить его либо в виде строки (распарсить ее на октеты (или преобразовать в число), в случае надобности, более чем просто) либо в виде 4-х отдельных полей - по полю на октет. |
Автор: zss 14.12.2005, 10:21 | ||
мне не нужно его редактировать - а так вроде подойдет LSD, а можно подробнее - я не очень силен в Java |
Автор: LSD 14.12.2005, 11:27 | ||||
Что-то типа такого (код полностью не тестил но принцип такой)
|
Автор: Andyb 14.12.2005, 11:32 |
jdbTable берет данные из queryDataSet в ней должна быть описана данная колонка(в сорсе как класс Column) вот для этой колонки можно поставить свойства displayMask и editMask |
Автор: zss 14.12.2005, 11:33 |
LSD, непонятно 3 вопроса 1. Что за тип CalcType.CALC 2. почему добавление происходит в dataSet 3. где связь между ipAdressColumn и ipFormatedColumn |
Автор: LSD 14.12.2005, 11:41 | ||||||||
Это интерфейс который содержит типы столбцов, калькулируемое, обычное или агрегатное.
Потому что это добавление новых данных, а не просто изменение отображения.
Это реализуется в классе IPField. Он кстати неправильно реализует преобразование.
Нет, это не прокатит. Там нужно работать с байтами, простым форматированием не обойтись. |