Вставка вместо имен полей - Description

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

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

Ответить
alecsar
Сообщения: 9
Зарегистрирован: 19 май 2006, 18:08

Вставка вместо имен полей - Description

Сообщение alecsar » 23 май 2006, 18:11

Люди добрые помогите. Я начал работать на firebird 1.5.3. Базы создаю в IBExpert. Хочу чтобы названия полей при выполнении запроса заменялись на Description этого поля. Скажите откуда програмно выдернуть Description?
Я использую компоненты IBX. Может в них есть какая либо стандартная процедура о которой я не знаю?

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

Сообщение kdv » 23 май 2006, 18:27

select ... from rdb$relation_fields

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 26 июн 2006, 14:12

kdv писал(а):select ... from rdb$relation_fields
ых, а вот как бы мне извернуться и получить Description, если я джойню 3-4 таблицы и есть у меня слабость первичный ключ обзывать везде REC_ID, но смысл для каждой таблицы несколько иной: где код сотрудника, а где код ящика?
вариант where rdb$relation_name='my table' не совсем меня устраивает, ибо хочется имя таблицы автоматом выдергивать

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

Сообщение Dimitry Sibiryakov » 26 июн 2006, 14:44

Ну так и выдергивай. У каждого поля есть указание к какой таблице он принадлежит (RTFM xsqlvar.relationname).

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 27 июн 2006, 06:29

Dimitry Sibiryakov писал(а):Ну так и выдергивай. У каждого поля есть указание к какой таблице он принадлежит (RTFM xsqlvar.relationname).
ух, спасибо за подсказку :) абыдна только, что в

TFIBQuery
property Fields[const Idx: Integer]: TFIBXSQLVAR read GetFields;

а вот в TpFIBDataSet
property Fields: TFields;

и все рано ведь при выполнении запроса типа

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

SELECT
 PRG_LIST.REC_ID,
 DEPARTMENTS.REC_ID,
 USERS.REC_ID,
 MODULES.REC_ID, .... 

вернет мне поля REC_ID, REC_ID1, REC_ID2, REC_ID3 .....
придется изгаляться ;)

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 27 июн 2006, 07:37

Альясы для полей никто не отменял.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 27 июн 2006, 08:07

CyberMax писал(а):Альясы для полей никто не отменял.
здорово, канешна, кто бы ишо мне эти алиасы в
rdb$relation_fields прописал :roll:

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

Сообщение Dimitry Sibiryakov » 27 июн 2006, 08:09

Вообще-то в том же sqlvar есть и настоящее имя поля...

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 27 июн 2006, 08:25

Dimitry Sibiryakov писал(а):Вообще-то в том же sqlvar есть и настоящее имя поля...
Воистину ты прав, надо было мне только доку повнимательней почитать :(
Все, одену каску и спрячусь за камнем - можете кидаться кирпичами.
:oops:

alecsar
Сообщения: 9
Зарегистрирован: 19 май 2006, 18:08

Сообщение alecsar » 05 ноя 2006, 11:41

Подскажите что делать
выполняю такой код:

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

select
...
CAST(MASS_FD AS NUMERIC(18,3)),
...
from
...
Хочу получить дескрипшен и вставить вместоназвания поля. Все поля удаются, а указанное выше:

iCounter1 := 0 to FieldCount - 1
IBDataSet.Current.Vars[iCounter1].SqlVar.AliasName = CAST
IBDataSet.Current.Vars[iCounter1].SqlVar.SqlName = CAST
IBDataSet.Current.Vars[iCounter1].SqlVar.RelName = ""
Есть ли какой выход и как получить настоящие имена поля и таблицы
(может я неправильный путь к sqlvar использую)
Если да дайте пример

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

Сообщение kdv » 05 ноя 2006, 14:03

не путай. описание поля вообще никак с запросом не связано и не может быть связано. То есть, оно может быть связано, если такое поле вообще есть, для него есть description, и это поле явно выбирается в запросе без всяких преобразований.
Например, в случае cast это уже НЕ исходный столбец.
Если тебе всего-лишь надо в гриде или еще где показывать русские имена столбцов - используй TField.DisplayLabel.

Ответить