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

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

числовые типы в Оракле - что выбрать? [IB6.x]


Вольный Стрелок ©   (2004-06-08 12:52:00) 

Люди, поделитесь опытом.
У меня есть БД на Interbase, которую надо перевести на Oracle, но при этом клиентские программы должны иметь возможность работать с любой из этих СУБД.
Для чисел в IB используются INTEGER, SMALLINT и FLOAT.
Клиентские приложения написаны на Delphi7 с использованием dbExpress. В коде используются persistent-определения полей, т.е. TIntegerField и т.п.
Хочется как можно меньше вносить изменений в эти вещи, т.к. там все отлажено.
Oracle-типы для чисел dbExpress видит как BCD или FMTBCD.
Вопрос: как все-таки лучше поступить с портированием типов? Чем на клиенте BCD лучше Integer?


Вольній Стрелок   (2004-06-09 12:44:00) [1]

2 AleXqwq
DBEXPRESS а не ADO


AleXqwq   (2004-06-09 11:41:00) [2]

ADOQuery.FieldByName('Col1').AsInteger;
ADOQuery.FieldByName('Col2').AsFloat; ...


AleXqwq   (2004-06-09 11:35:00) [3]

ADOQuery.FieldByName('Col1').AsInteger;
ADOQuery.FieldByName('Col2').AsFloat; ...


Desdechado   (2004-06-09 11:10:00) [4]

2 Reindeer Moss Eater
это где такую настройку? у меня dbExpress


Reindeer Moss Eater   (2004-06-09 08:33:00) [5]

а хотелось бы, чтобы видела как TIntegerField, ....

Для того, чтобы поле NUMBER(X,0) выглядело в Delphi как ftIntegerField требуется ENABLE INTEGERS=TRUE


Petr V. Abramov   (2004-06-08 19:56:00) [6]

Internal Numeric Format
Oracle stores numeric data in variable-length format. Each value is stored in
scientific notation, with 1 byte used to store the exponent and up to 20 bytes to store
the mantissa. The resulting value is limited to 38 digits of precision. Oracle does not
store leading and trailing zeros. For example, the number 412 is stored in a format
similar to 4.12 x 10 2 , with 1 byte used to store the exponent(2)and2 bytesusedto
store the three significant digits of the mantissa(4,1,2). Negative numbers include
the sign in their length.
Taking this into account, the column size in bytes for a particular numeric data
value NUMBER(p),wherep is the precision of a given value, can be calculated using
the following formula:
ROUND((length(p)+s)/2))+1
where s equals zero if the number is positive, and s equals 1 if the number is
negative.
Zero and positive and negative infinity (only generated on import from Version 5
Oracle databases) are stored using unique representations. Zero and negative
infinity each require 1 byte; positive infinity requires 2 bytes.

    ВСЕМ ЧИТАТЬ Concepts!
    Внимательно


Johnmen   (2004-06-08 18:50:00) [7]

>DenK_vrtz ©   (08.06.04 14:34) [6]
>INTEGER - NUMBER(38)

Надеюсь, понятно, что 38 не означает 38 байт под хранение...
:)


Вольный Стрелок   (2004-06-08 15:30:00) [8]

в Оракле INTEGER, SMALLINT, FLOAT, DOUBLE PRECISION - это все подтипы NUMBER, и Дельфи их видит соответственно как BCD и FMTBCD в зависимости от точности.
а хотелось бы, чтобы видела как TIntegerField, TSmallintField, TFloatField соответственно.

кстати, при написании первого поста поставил галки "СУБД - IB6.5 и Оракл", а отобразило только ИБ :(


DenK_vrtz   (2004-06-08 14:34:00) [9]

Преобразование типов данных ANSI в типы данных ORACLE:

INTEGER - NUMBER(38)

(с) Сервер ORACLE. Основные концепции.


bushmen   (2004-06-08 14:07:00) [10]

>Курдль ©   (08.06.04 13:27) [2]
>Integer в Оракле - это 32 байта!

Что-то не помню такого.

>Так что надо исходить из реалий. Например:
>Целые - NUMBER(16)
>Денежные - NUMBER(20,4)

Не многовато ли для денежных сумм ?


Johnmen   (2004-06-08 14:00:00) [11]

>Курдль ©   (08.06.04 13:27) [2]
>Integer в Оракле - это 32 байта!

Можно ссылку на источник ?
:)


Sandman25   (2004-06-08 13:54:00) [12]

>Integer в Оракле - это 32 байта!

Не знал.


Курдль   (2004-06-08 13:27:00) [13]


> Если поле в БД выглядит как Integer, то и в Delphi оно останется
> IntegerField


Integer в Оракле - это 32 байта! У кого-то харя может треснуть! :)

Так что надо исходить из реалий. Например:
Целые - NUMBER(16)
Денежные - NUMBER(20,4)


Sandman25   (2004-06-08 12:54:00) [14]

BCD и FMTBCD - это для Decimal.
Если поле в БД выглядит как Integer, то и в Delphi оно останется IntegerField


Наверх

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