красиво подписать столбцы DBGrid

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

красиво подписать столбцы DBGrid

Сообщение londinium » 14 окт 2007, 13:20

Здравствуйте, Господа!

Есть такая таблица:

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

CREATE TABLE FIRM_REFERENCE (
    ID         INTEGER NOT NULL,
    FIRM_NAME  VARCHAR(50) NOT NULL,
    TELEPHONE  VARCHAR(10) DEFAULT null COLLATE PXW_CYRL
);

ALTER TABLE FIRM_REFERENCE ADD CONSTRAINT PK_FIRM_REFERENCE PRIMARY KEY (ID);
Это справочник фирм.

Выборка из него осуществляется с помощью компонента ТIBQuery таким образом

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

    MainDataModule->ReferencesQuery->SQL->Clear();
    MainDataModule->ReferencesQuery->SQL->Add("select  id,firm_name,telephone from firm_reference");
    MainDataModule->ReferencesTransaction->StartTransaction();
    MainDataModule->ReferencesQuery->Prepare();
    MainDataModule->ReferencesQuery->Open();
Затем захотелось мне странного: красиво подписать столбцы в DBGrid, т.е. первый столбец - "ИД", второй "Название фирмы", третий - "Телефон"
Нашел такой вариант:

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

  ReferencesForm->DBGrid->Columns->Items[0]->Field->DisplayLabel="ИД";
  ReferencesForm->DBGrid->Columns->Items[1]->Field->DisplayLabel="Название фирмы";
  ReferencesForm->DBGrid->Columns->Items[2]->Field->DisplayLabel="Телефон";

а потом придумал запрос, который решает все мои проблемы:

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

SELECT ID AS "ИД", FIRM_NAME AS "НАЗВАНИЕ ФИРМЫ",TELEPHONE AS "ТЕЛЕФОН" FROM FIRM_REFERENCE
но возник вопрос, с которым обращаюсь за помощью:

как выполнить такой запрос из TIBQuery, а еще лучше из хранимой процедуры, чтобы при выполнении запроса столбцы DBGrid подписались красиво без моего участия?

Работаю на C++Builder 6, IBX, FireBird 1.5.3 SS(разработка), работать будет под FireBird 2.0 SS

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

Сообщение kdv » 14 окт 2007, 13:30

AS - это лишнее.
также можно использовать репозитарий имен столбцов и их имен для грида.
по большому счету репозитарий лучше, т.к. можно менять названия столбцов без изменения запроса.

можно вообще в программе у столбцов в дизайн-тайме прописать displayLabel. В общем, ты не на "красиво" должен ориентироваться, а на то, насколько удобно будет такое решение, когда тебе понадобится поменять надпись на одном из столбцов.

p.s.

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

MainDataModule->ReferencesQuery->Prepare();
MainDataModule->ReferencesQuery->Open()
зачем тут Prepare ?

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 14 окт 2007, 21:25

AS - это лишнее.
Почему лишнее? Основной вопрос, из-за которого я ищу решение, такой: завтра мне захочется добавить в таблицу какое-то поле и выбирать его, и придется дописывать имя поля, например,

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

ReferencesForm->DBGrid->Columns->Items[2]->Field->DisplayLabel="Статус"; 

а если я оберну запрос с As, например, в хранимую процедуру, то столбцы подпишутся автоматом. Где я не прав?

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

Сообщение kdv » 15 окт 2007, 00:22

Почему лишнее?
потому что это НЕОБЯЗАТЕЛЬНОЕ ключевое слово.
а если я оберну запрос с As, например, в хранимую процедуру, то столбцы подпишутся автоматом. Где я не прав?
именно тут. потому что можно написать в запросе внутри процедуры все что угодно, но наружу процедура выдает данные только через RETURNING параметры. Прежде чем теоретизировать - попробуйте, получится-ли это у Вас.

Ответить