FB 2.1.1. Как считать параметры поля
FB 2.1.1. Как считать параметры поля
Здравствуйте!
Господа, не подскажете, как в FB считать параметры поля таблицы(конкретно интересуют тип поля и его длина , т.е. Numeric(5,2) varchar(5)) как они были заданы при его создании?
P.S. Expert это делать умеет. Я пытался найти в rdb$*, но видно не судьба...
Господа, не подскажете, как в FB считать параметры поля таблицы(конкретно интересуют тип поля и его длина , т.е. Numeric(5,2) varchar(5)) как они были заданы при его создании?
P.S. Expert это делать умеет. Я пытался найти в rdb$*, но видно не судьба...
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: FB 2.1.1. Как считать параметры поля
Раз не смог найти сам и LangRef не помог, значит действительно не судьба.
Re: FB 2.1.1. Как считать параметры поля
www.ibase.ru/devinfo/sysqry.htm
поиском надо, поиском. только это не "параметры поля", вернее такой термин почти никто не использует.
поиском надо, поиском. только это не "параметры поля", вернее такой термин почти никто не использует.
Re: FB 2.1.1. Как считать параметры поля
To kdv: Спасибо.
Re: FB 2.1.1. Как считать параметры поля
К сожалению я рано порадовался...
Вопрос остаётся, так как F.RDB$FIELD_TYPE(описание типа вроде можно взять из другой системной таблицы - что-то вроде $rdb_field_type) вроде не подразумевает описание Numeric и т.п. а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?
Вопрос остаётся, так как F.RDB$FIELD_TYPE(описание типа вроде можно взять из другой системной таблицы - что-то вроде $rdb_field_type) вроде не подразумевает описание Numeric и т.п. а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?
-
- Сообщения: 52
- Зарегистрирован: 28 сен 2007, 10:19
Re: FB 2.1.1. Как считать параметры поля
Он их через компоненты доступа скорее всего определяетallzero писал(а):... а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?
Re: FB 2.1.1. Как считать параметры поля
RDB$TYPES
Re: FB 2.1.1. Как считать параметры поля
В RDB$TYPES НЕТУ(К ПРИМЕРУ) Numeric!!!!
А ibexpert его показывает.
А ibexpert его показывает.
Re: FB 2.1.1. Как считать параметры поля
Это как?belov-evgenii писал(а):Он их через компоненты доступа скорее всего определяетallzero писал(а):... а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?
Re: FB 2.1.1. Как считать параметры поля
тогда учи datadef.pdf на тему числовых типов данных. Лезешь в потроха - будь добр ознакомиться с документацией.В RDB$TYPES НЕТУ(К ПРИМЕРУ) Numeric!!!!
А ibexpert его показывает.
Re: FB 2.1.1. Как считать параметры поля
ОК. Буду учить.kdv писал(а):тогда учи datadef.pdf на тему числовых типов данных. Лезешь в потроха - будь добр ознакомиться с документацией.В RDB$TYPES НЕТУ(К ПРИМЕРУ) Numeric!!!!
А ibexpert его показывает.
Я там найду что-нить кроме того, что Numeric и некоторые другие - это "виртуальные" типы и на самом деле их не существует?
Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
Re: FB 2.1.1. Как считать параметры поля
Читай, читай. Всё написано.allzero писал(а):Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
Re: FB 2.1.1. Как считать параметры поля
ну так посмотри на конретный столбец в сист. таблицах.Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
Re: FB 2.1.1. Как считать параметры поля
Да вроде уже дырки в этих системных таблах протёр. Не вижу я ни в одной записи слова Numeric! Не вижу!kdv писал(а):ну так посмотри на конретный столбец в сист. таблицах.Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
Re: FB 2.1.1. Как считать параметры поля
так и не написано там numeric. интересно, как можно пялиться на данные, и не понимать что там.
1. numeric и decimal это почти одно и то же, чем отличается - написано в datadef.pdf
2. берешь например employee.fdb, таблицу employee.
там есть salary - numeric(10,2). Объявлено как домен, но это не важно. В rdb$relation_fields, как видишь, есть только ссылка на rdb$fields (как домен или как rdb$nnn) - rdb$field_source, сам тип описан в rdb$fields. Идем туда:
rdb$field_length = 8 - это значит int64 (8 байт)
rdb$field_scale = -2 - это масштаб (numeric(precision, scale))
rdb$field_type = 16 - см. rdb$types, в отношении rdb$field_type это int64, как я и сказал чуть выше про field_length. В первом диалекте для numeric/decimal тип может быть 27 (double precision) или 10 (float).
rdb$field_precision = 10 - это точность (numeric(precision, scale))
Вот и все. numeric(10, 2). Охренительно сложно?
я это все не помню, разумеется, посмотрел прямо сейчас.
то есть, в сист. таблицах numeric и decimal отличить невозможно. Поэтому инструменты, извлекающие метаданные, сообщают об этом типе как о numeric. Потому что decimal это "чуть больше, чем numeric", но только при объявлении. При хранении он уже не "чуть больше", а такой, какой есть. Соответственно - numeric.
p.s. если rdb$field_precision = 0, то это целочисленный тип - smallint, integer, bigint. Если меньше нуля, то это numeric с точностью и масштабом.
Код формирования списка типов столбцов таблицы на дельфях занимает примерно 20 строк.
1. numeric и decimal это почти одно и то же, чем отличается - написано в datadef.pdf
2. берешь например employee.fdb, таблицу employee.
там есть salary - numeric(10,2). Объявлено как домен, но это не важно. В rdb$relation_fields, как видишь, есть только ссылка на rdb$fields (как домен или как rdb$nnn) - rdb$field_source, сам тип описан в rdb$fields. Идем туда:
rdb$field_length = 8 - это значит int64 (8 байт)
rdb$field_scale = -2 - это масштаб (numeric(precision, scale))
rdb$field_type = 16 - см. rdb$types, в отношении rdb$field_type это int64, как я и сказал чуть выше про field_length. В первом диалекте для numeric/decimal тип может быть 27 (double precision) или 10 (float).
rdb$field_precision = 10 - это точность (numeric(precision, scale))
Вот и все. numeric(10, 2). Охренительно сложно?
я это все не помню, разумеется, посмотрел прямо сейчас.
то есть, в сист. таблицах numeric и decimal отличить невозможно. Поэтому инструменты, извлекающие метаданные, сообщают об этом типе как о numeric. Потому что decimal это "чуть больше, чем numeric", но только при объявлении. При хранении он уже не "чуть больше", а такой, какой есть. Соответственно - numeric.
p.s. если rdb$field_precision = 0, то это целочисленный тип - smallint, integer, bigint. Если меньше нуля, то это numeric с точностью и масштабом.
Код формирования списка типов столбцов таблицы на дельфях занимает примерно 20 строк.
Re: FB 2.1.1. Как считать параметры поля
OK. Всем спасибо. Буду писать эти 20 строк. Принцип понятен, теперь непосредственно велосипед. А никто уже не делал подобного(всё-таки не люблю изобретать велосипеды)?
Re: FB 2.1.1. Как считать параметры поля
я делал. и много кто еще делал, кто выводит структуру таблицы в виде текста.
но это коммерческий код. Так что даже 20 строк case по rdb$field_type - увы, приводить не буду.
но это коммерческий код. Так что даже 20 строк case по rdb$field_type - увы, приводить не буду.
Re: FB 2.1.1. Как считать параметры поля
ОК. А за консультацию спасибо.kdv писал(а):я делал. и много кто еще делал, кто выводит структуру таблицы в виде текста.
но это коммерческий код. Так что даже 20 строк case по rdb$field_type - увы, приводить не буду.