FB 2.1.1. Как считать параметры поля

Модераторы: kdv, CyberMax

Ответить
allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

FB 2.1.1. Как считать параметры поля

Сообщение allzero » 07 фев 2009, 20:37

Здравствуйте!

Господа, не подскажете, как в FB считать параметры поля таблицы(конкретно интересуют тип поля и его длина , т.е. Numeric(5,2) varchar(5)) как они были заданы при его создании?

P.S. Expert это делать умеет. Я пытался найти в rdb$*, но видно не судьба... :(

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: FB 2.1.1. Как считать параметры поля

Сообщение Dimitry Sibiryakov » 08 фев 2009, 13:58

Раз не смог найти сам и LangRef не помог, значит действительно не судьба.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB 2.1.1. Как считать параметры поля

Сообщение kdv » 08 фев 2009, 14:48

www.ibase.ru/devinfo/sysqry.htm

поиском надо, поиском. только это не "параметры поля", вернее такой термин почти никто не использует.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 09 фев 2009, 09:44

To kdv: Спасибо.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 09 фев 2009, 23:10

К сожалению я рано порадовался...
Вопрос остаётся, так как F.RDB$FIELD_TYPE(описание типа вроде можно взять из другой системной таблицы - что-то вроде $rdb_field_type) вроде не подразумевает описание Numeric и т.п. а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?

belov-evgenii
Сообщения: 52
Зарегистрирован: 28 сен 2007, 10:19

Re: FB 2.1.1. Как считать параметры поля

Сообщение belov-evgenii » 09 фев 2009, 23:19

allzero писал(а):... а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?
Он их через компоненты доступа скорее всего определяет

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: FB 2.1.1. Как считать параметры поля

Сообщение hvlad » 09 фев 2009, 23:58

RDB$TYPES

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 10 фев 2009, 09:28

В RDB$TYPES НЕТУ(К ПРИМЕРУ) Numeric!!!!
А ibexpert его показывает.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 10 фев 2009, 09:29

belov-evgenii писал(а):
allzero писал(а):... а в IBExpert показывается именно тип и длина поля, какие я задал при создании таблицы, а я хочу видеть именно их. Или я чего-то не понимаю?
Он их через компоненты доступа скорее всего определяет
Это как?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB 2.1.1. Как считать параметры поля

Сообщение kdv » 10 фев 2009, 10:23

В RDB$TYPES НЕТУ(К ПРИМЕРУ) Numeric!!!!
А ibexpert его показывает.
тогда учи datadef.pdf на тему числовых типов данных. Лезешь в потроха - будь добр ознакомиться с документацией.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 10 фев 2009, 13:07

kdv писал(а):
В RDB$TYPES НЕТУ(К ПРИМЕРУ) Numeric!!!!
А ibexpert его показывает.
тогда учи datadef.pdf на тему числовых типов данных. Лезешь в потроха - будь добр ознакомиться с документацией.
ОК. Буду учить.
Я там найду что-нить кроме того, что Numeric и некоторые другие - это "виртуальные" типы и на самом деле их не существует?
Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: FB 2.1.1. Как считать параметры поля

Сообщение WildSery » 10 фев 2009, 13:29

allzero писал(а):Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
Читай, читай. Всё написано.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB 2.1.1. Как считать параметры поля

Сообщение kdv » 10 фев 2009, 13:54

Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
ну так посмотри на конретный столбец в сист. таблицах.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 10 фев 2009, 22:06

kdv писал(а):
Но вопрос ведь в другом - как всё-таки Expert показывает описание поля именно как Numeric, а не какой-нибудь Short?
ну так посмотри на конретный столбец в сист. таблицах.
Да вроде уже дырки в этих системных таблах протёр. Не вижу я ни в одной записи слова Numeric! Не вижу!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB 2.1.1. Как считать параметры поля

Сообщение kdv » 11 фев 2009, 02:12

так и не написано там 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 строк.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 11 фев 2009, 09:12

OK. Всем спасибо. Буду писать эти 20 строк. Принцип понятен, теперь непосредственно велосипед. А никто уже не делал подобного(всё-таки не люблю изобретать велосипеды)? :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB 2.1.1. Как считать параметры поля

Сообщение kdv » 11 фев 2009, 21:37

я делал. и много кто еще делал, кто выводит структуру таблицы в виде текста.
но это коммерческий код. Так что даже 20 строк case по rdb$field_type - увы, приводить не буду.

allzero
Сообщения: 9
Зарегистрирован: 04 фев 2009, 10:51

Re: FB 2.1.1. Как считать параметры поля

Сообщение allzero » 12 фев 2009, 09:26

kdv писал(а):я делал. и много кто еще делал, кто выводит структуру таблицы в виде текста.
но это коммерческий код. Так что даже 20 строк case по rdb$field_type - увы, приводить не буду.
ОК. А за консультацию спасибо.

Ответить