![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать тип поля? [D7, XP]
ixen © (2011-07-22 11:58:00)Можно ли узнать тип поля таблицы используя только SQL запрос? СУБД Firebird.
Loginov Dmitry (2011-07-22 20:34:00) [1]
> или в Firebird по другому?
Разработчики Firebird не переворачивают с ног наголову системные таблицы от версии к версии, поэтому использование системных таблиц, разумеется в меру, это нормальная практика. Плюс к тому не нужно каждый раз переучиваться.
Системные таблицы для FB - это азы ;)
К примеру, то, что в MS SQL делается так:
SELECT 'hello'
в FB делается с использованием системной таблицы RDB$DATABASE:
SELECT 'hello' FROM RDB$DATABASE
Я бы не стал называть это преимуществом или недостатком, так уж повелось исторически. Однако кардинально менять сложившиеся вещи - тоже нехорошо.
sniknik (2011-07-22 16:24:00) [2]> У них пробовали SQL-ом получать интересующие данные такого рода?
в ado OpenSchema получает у всех одинаково, каким образом реализуется в провайдере конкретной не особо интересует
> И как, запросы были идентичные?"
в mssql как раз на этом основании и рекомендуют... правда о идентичности "междубазовой" речь не идет, а идет о "межверсионной", типа от версии к версии системные таблицы могут меняться, а вот схемы нет.
Игорь Шевченко (2011-07-22 15:55:00) [3]sniknik © (22.07.11 15:11) [7]
"Вы хотя бы с двумя разными СУБД работали? У них пробовали SQL-ом получать интересующие данные такого рода? И как, запросы были идентичные?"
http://www.sql.ru/forum/actualthread.aspx?bid=2&tid=521448&pg=1
sniknik (2011-07-22 15:11:00) [4]вообще рекомендуют пользоваться INFORMATION_SCHEMA, а не лезть в системные таблицы. или в Firebird по другому?
ixen (2011-07-22 13:41:00) [5]нашел решение
SELECT RDB$RELATIONS.RDB$RELATION_NAME,
RDB$RELATION_FIELDS.RDB$FIELD_NAME,
RDB$RELATION_FIELDS.RDB$FIELD_POSITION,
RDB$RELATION_FIELDS.RDB$FIELD_SOURCE,
RDB$RELATION_FIELDS.RDB$NULL_FLAG,
RDB$RELATION_FIELDS.RDB$DEFAULT_SOURCE,
RDB$FIELDS.RDB$COMPUTED_SOURCE, RDB$FIELDS.RDB$DEFAULT_SOURCE,
RDB$FIELDS.RDB$FIELD_TYPE, RDB$FIELDS.RDB$NULL_FLAG
FROM RDB$RELATIONS
INNER JOIN RDB$RELATION_FIELDS ON
(RDB$RELATIONS.RDB$RELATION_NAME = RDB$RELATION_FIELDS.RDB$RELATION_NAME)
INNER JOIN RDB$FIELDS ON
(RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME)
WHERE
((RDB$RELATIONS.RDB$SYSTEM_FLAG = 0)
and
(RDB$RELATIONS.RDB$VIEW_SOURCE IS NULL))
ORDER BY RDB$RELATIONS.RDB$RELATION_NAME, RDB$RELATION_FIELDS.RDB$FIELD_POSITION;
всем спасибо за помощь
sniknik (2011-07-22 13:32:00) [6]http://www.google.ru/search?q=INFORMATION_SCHEMA+Firebird+&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox
ixen (2011-07-22 13:07:00) [7]вот допустим нет делфи.. только IBExpert,фаерберд сервер и база ... вот нужно в нем выполнить sql запрос который выводит информацию о запрашиваемом поле...
Anatoly Podgoretsky (2011-07-22 12:56:00) [8]Наверно тип TField у FireBird, тогда элементарно.
ixen (2011-07-22 12:50:00) [9]Спасибо!
Сергей М. (2011-07-22 12:43:00) [10]Можно.