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

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

Как отличить тип колонки int от float


Kinder ©   (2007-10-15 19:23:00) 

База Данных Oracle10g, возвращается ref cursor из процедуры.
Все колонки типа NUMBER преобразуются во float - OK.
Но если у меня интовое поле, то оно всё равно преобразуется в float.Как можно отличить int от number. Досадно выводить дробную часть у целого, по определению, числа.


Reindeer Moss Eater   (2007-10-18 17:46:00) [1]

Камень в основном один. Разный диапазон Integer в паскале и оракле.
То, что в оракле будет положительным целым, в паскале может оказаться отрицательным


Kinder   (2007-10-18 17:42:00) [2]

Reindeer Moss Eater © - 5 балов.
Интересно только нет ли камней при этом(я просто не понимаю как отличает в таком случае, но работает, пока, это факт).


Игорь Шевченко   (2007-10-17 14:33:00) [3]


> Как можно отличить int от number.


TFloatField.Precision не поможет ?


Reindeer Moss Eater   (2007-10-17 14:11:00) [4]

надо включить в БДЕ "Enable Integers" тогда будет ftInteger


Kinder   (2007-10-17 13:33:00) [5]

не думаю Desdechado ©, что это ошибка, так как пытаться получить точный тип налету было бы не верно, грубо говоря это сказалось бы на производительности сильно.
Всем спасибо за участие.
ps:будем искать другие варианты.


Desdechado   (2007-10-17 12:00:00) [6]

БДЕ не сертифицирован для Оракла больше восьмерки.
Однако в некоторых случаях даже заточенными компонентами типа ODAC не получается добыть верный тип поля, т.к. сам Оракл его возвращает с ошибкой.
Например, в запросе X будет просто NUMBER, хотя в Y поле NUMBER(5)
SELECT x FROM y WHERE x < 0
UNION ALL
SELECT 1 FROM y WHERE x > 0

PS у меня 9.2


Kinder   (2007-10-17 11:19:00) [7]

Desdechado © "Многое зависит от используемых компонентов доступа" - это правда.Работаем через BDE и столкнулись с этой проблемой. Разве никто не не наступал на эти грабли?

to Val : Если в Oracle вы напишите NUMBER(1) , то для BDE - это float. precision вообще не возвращается. Scale - возвращется.

Если я в чём то не прав, просьба поправить.


Val   (2007-10-16 13:28:00) [8]

Без дробной части. Я об этом:
When you specify numeric fields, it is a good idea to specify the precision and scale. This provides extra integrity checking on input.


Desdechado   (2007-10-16 11:14:00) [9]

Это всего лишь псевдонимы (для совместимости с ANSI datatypes) для NUMBER(38)


Val   (2007-10-16 11:10:00) [10]

спасибо, я это уже читал. и это лишь подтверждает написанное мной.


Desdechado   (2007-10-16 10:59:00) [11]

Многое зависит от используемых компонентов доступа.

Val ©   (15.10.07 23:01) [1]
Use NUMBER subtypes INTEGER, INT, and SMALLINT to declare integers with a maximum precision of 38 decimal digits.


Val   (2007-10-15 23:01:00) [12]

"интовое поле" - не number


Наверх

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