Как получить описания полей таблицы (Как в IBExpert) ???

Запросы, планы, оптимизация запросов, ...

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

Ответить
Antoxa
Сообщения: 169
Зарегистрирован: 06 июл 2006, 10:53

Как получить описания полей таблицы (Как в IBExpert) ???

Сообщение Antoxa » 23 мар 2008, 05:48

Подскажите, как получить описание поля таблицы. В IBExpert это реализовано. А в Internet нигде не могу найти...

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 23 мар 2008, 08:59

RFTM Language Reference

Antoxa
Сообщения: 169
Зарегистрирован: 06 июл 2006, 10:53

Можно по подробнее

Сообщение Antoxa » 23 мар 2008, 17:44

dimitr писал(а):RFTM Language Reference
А можно по подробнее, что это означает??? В Access+ADO доступ к описанию поля осуществляется ч-з Fields('').Properties('Descriptions'), а как получить 'Descriptions' поля бд FB ч-з IBX или что-нибудь другое???

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

Сообщение kdv » 24 мар 2008, 09:00

что-то ты не хочешь смотреть, куда тебе сказали. у системных таблиц есть столбец rdb$description. Туда IBExpert и пишет описание. Если тебе его надо выбрать - выбирай на здоровье. Например, расширь запрос
www.ibase.ru/devinfo/sysqry.htm
Последний раз редактировалось kdv 24 мар 2008, 17:23, всего редактировалось 1 раз.

Antoxa
Сообщения: 169
Зарегистрирован: 06 июл 2006, 10:53

Сообщение Antoxa » 24 мар 2008, 15:45

kdv писал(а):что-то ты не хочешь смотреть, куда тебе сказали. у системных таблиц есть столбец rdb$description. Туда IBExpert и пишет описание. Если тебе его надо выбрать - выбирай на здоровье. Например, расширь запрос
www.ibase.ru/devinfo/sysqry.htm
Ну вот! Все понятно, спасибо!!!

KKomov
Сообщения: 14
Зарегистрирован: 20 дек 2007, 17:30

Re: Как получить описания полей таблицы (Как в IBExpert) ???

Сообщение KKomov » 15 май 2008, 14:36

Antoxa писал(а):Подскажите, как получить описание поля таблицы. В IBExpert это реализовано. А в Internet нигде не могу найти...
Я это сделал так.

Сначала создаём полезное VIEW:

Код: Выделить всё

/* View: FIELDS */
CREATE VIEW FIELDS(
    TABLE_NAME,
    "POSITION",
    NAME,
    "LENGTH",
    "TYPE",
    SCALE,
    "SUB_TYPE",
    DESCRIPTION,
    IS_COMPUTED,
    COMPUTED_SOURCE,
    NOT_NULL)
AS
SELECT
  R.RDB$RELATION_NAME  TABLE_NAME,
  R.RDB$FIELD_POSITION "POSITION",
  R.RDB$FIELD_NAME     NAME,
  F.RDB$FIELD_LENGTH   "LENGTH",
  F.RDB$FIELD_TYPE     "TYPE",
  F.RDB$FIELD_SCALE    SCALE,
  F.RDB$FIELD_SUB_TYPE "SUB_TYPE",
  R.RDB$DESCRIPTION    "DESCRIPTION",
  CASE
    WHEN (F.RDB$COMPUTED_SOURCE IS NOT NULL) THEN 1
    ELSE 0
  END IS_COMPUTED,
  F.RDB$COMPUTED_SOURCE COMPUTED_SOURCE,
  CASE
    WHEN (R.RDB$NULL_FLAG = 1) THEN 1
    ELSE 0
  END NOT_NULL
FROM
  RDB$RELATION_FIELDS R
  JOIN RDB$FIELDS F ON R.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME
  JOIN RDB$TYPES T ON F.RDB$FIELD_TYPE = T.RDB$TYPE AND T.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'
WHERE 
  R.RDB$SYSTEM_FLAG = 0 --не системные
ORDER BY
  R.RDB$RELATION_NAME,
  R.RDB$FIELD_POSITION
;
Теперь в датамодуля я собираюсь получать его как-то так:
(этот код привязан к моим тулзам и без них не скомпилируется, но смысл ясен)

Код: Выделить всё

//описание поля
String TDM::FieldDescription(String table, String field)
{
    IBSQLHolder sql = new_sql(
        "SELECT DESCRIPTION\n"
        "FROM FIELDS\n"
        "WHERE TABLE_NAME=:TN AND NAME=:FN"
    );
    QX(sql).Param("TN", table).Param("FN", field).Exec();
    String D = StringField(sql, "DESCRIPTION");
    return D;
}

Antoxa
Сообщения: 169
Зарегистрирован: 06 июл 2006, 10:53

Сообщение Antoxa » 15 май 2008, 14:54

Да там вроде все просто ч-з rdb$description :?

Ответить