Страница 1 из 1

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

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

Добавлено: 23 мар 2008, 08:59
dimitr
RFTM Language Reference

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

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

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

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

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

Добавлено: 15 май 2008, 14:36
KKomov
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;
}

Добавлено: 15 май 2008, 14:54
Antoxa
Да там вроде все просто ч-з rdb$description :?