Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как предварительно назначить именна DBGrid колонкам [D6, DBGRID]


NikNet ©   (2007-01-20 20:04:00) 

програмным образом... при каждом запросе...

Вообщем мне надо автоматизировать системы наименование колонак...
Составил такой код но он работает только при наборе данных...

type
tf = record
 e:string;
 r:string;
end;

const
fnc = 10;
fn:array[1..fnc] of tf =
(
(e:'OFFICE';        r:'Îôèñ'),
( e:'CITY';         r:'Ãîðîä'),
( e:'REGION';       r:'Ðåãèîí'),
( e:'MGR';          r:'Ìàíàäæåð'),
( e:'TARGET';       r:'Âûðó÷êà'),
( e:'SALES';        r:'Çàðïëàòà'),
( e:'PRODUCTID';    r:'Íîìåð ïðîäóêòà'),
( e:'ProductName';  r:'Èìÿ ïðîäóêòà'),
( e:'CategoryID';   r:'Êàòåãîðèÿ'),
( e:'SupplierID';   r:'Îòêðûò/Çàêðûò')
);

procedure TForm1.Button2Click(Sender: TObject);
var
 k,i: Integer;
 F: TFieldDef;
begin
 ADOQuery1.Open;
 ListBox1.Items.Clear;
 with ADOQuery1 do
 begin
   for i := 0 to FieldDefs.Count - 1 do
   begin
     F := FieldDefs.Items[i];
     DBGridEh6.Columns.Add;
     DBGridEh6.Columns[i].FieldName:=F.Name;
     for k:=1 to fnc do
     Begin
       if UpperCase(trim(fn[k].e))=UpperCase(trim(F.Name)) then
       DBGridEh6.Columns[i].Title.Caption:=fn[k].r;
     end;
   end;
 end;
ADOQuery1.Open;
end;


Sergey13   (2007-01-22 11:21:00) [1]

ИМХО, целесообразнее хранить названия полей в отдельной таблице (имя таблицы, оригинальное название, русское название).


MsGuns   (2007-01-22 10:55:00) [2]

>sniknik ©   (21.01.07 20:49) [14]
>завидно? ;о))

Не-а

>delphim   (22.01.07 05:29) [16]

Не надо советовать глупостей


delphim   (2007-01-22 05:29:00) [3]

Если я правильно понял, требуется визуализировать активный набор данных (DataSet) с помощью grid.
Тогда, может быть, так.
1. Где-то должен существовать ожидаемый список имён полей DataSet (пусть его имя fieldList).
2. Пишем цикл по этому набору fieldList

 for ...

   fieldname := fieldList.fieldName[i];
   if DataSet.FindField(fieldname) = nil then continue;

   col := grid.Columns.Add;
   col.FieldName := fieldname;
   col.Title.Caption := ...
// и, далее. при желании, по списку
// Width, EditMask, ReadOnly, ...
 end;


Павел Калугин   (2007-01-21 22:28:00) [4]

> [9] NikNet ©   (21.01.07 09:27)
> СУБД Sybase

какой Sybase???
он разный, однако...


sniknik   (2007-01-21 20:49:00) [5]

MsGuns ©   (21.01.07 20:07) [13]
> Пользуюсь успехом Девчонок (Лет от 14 - 27)  
завидно? ;о))
оно конечно, надо тогда в брачные аферисты идти... делать, так сказать то, что получается. хотя, судя по следующему, про программирование... парень скорее в обоих случаях выдает желаемое за действительное.


MsGuns   (2007-01-21 20:07:00) [6]

>NikNet ©   (21.01.07 15:17) [11]
>А как добраться до Дескрипта?

Из анкеты:

Интересное о себе
Очень красивый
Пользуюсь успехом Девчонок (Лет от 14 - 27)  
Очень хорошо знаю программирование

НУ да короче хватит и этого!


Если такой красивый, зачем пошел в программисты ?
А если такой хороший программист, то зачем ламерские вопросы задаешь ?

Короче, хватит и [8]
Если не хватит, спроси у девчонок от 14 до 27

ЗЫ. Кстати, и вовсе неинтересно
;)


Anatoly Podgoretsky   (2007-01-21 17:18:00) [7]

Куда тебя Arazel занесло.


NikNet   (2007-01-21 15:17:00) [8]

MsGuns ©   (21.01.07 01:10) [8]
А как добраться до Дескрипта?


sniknik   (2007-01-21 11:17:00) [9]

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

> Может пустой запрос для начало запустить...? Что бы получить именна полей
а смысл? тебе же показали простое решение по "переименовке, в один проход", зачем еще извращения?


NikNet   (2007-01-21 09:27:00) [10]

СУБД Sybase

Мои подход прекрасно работает но не с первого раза!
То есть при первом запуске я получаю именна на англиском (оригинальные)
при втором я перейменовую...

Но! Два одних и тех же запросов запускать это глуппо
вот я и спрашиваю где взять именна всех столбцов... без запроса...

Может пустой запрос для начало запустить...? Что бы получить именна полей


MsGuns   (2007-01-21 01:10:00) [11]

Неверен сам подход. Грид сам прекрасно умеет создавать свою коллекцию колонок при связке его с открытым датасетом и не надо без крайней нужды мешать ему ;)

"Русские" имена можно получить из дескрипторов полей в самой БД (какая БД не указана, но такая возможность есть в большинстве СУБД) либо "сделать" их в самом запросе по такой "рыбе":

Select FIO as 'ФИО', Burned as 'Дата рожд.' ...

Ну и, наконец, можно переобозвать колонки чисто "клиентским" способом, как было указано выше, просто пробежавшись по филдам связанного с гридом датасета и для каждого определив "по-русски" сво-во DisplayLabel.


sniknik   (2007-01-21 00:51:00) [12]

> "в целом" относилось к ...
эт я понял, у меня тоже в "целом" немного про другое. хотя... и там неправильно ;), он же их создает... дубли уже получается.


Johnmen   (2007-01-20 23:15:00) [13]


> sniknik ©   (20.01.07 22:29) [4]


"в целом" относилось к обходу всех колонок и смене имён на соответствующие из массива.


Sergey Masloff   (2007-01-20 22:46:00) [14]

select one as 'раз', two as 'два' from my_dummy_table


sniknik   (2007-01-20 22:29:00) [15]

> Ну в целом ты правильно делаешь.
неправильно. он решает свою "заморочку" и спрашивает про нее, а не про то что нужно на самом деле.

> Нет мне надо предварительно найменовать колонки то есть ...
ну и? почему бы на спрашивать именно про это? нет, можно конечно и через предварительное создание полей, или в дбгриде колонки... но... решение -
procedure TForm1.Button1Click(Sender: TObject);
begin
 ADODataSet1.Open;
 ADODataSet1.Fields[0].DisplayLabel:= 'fddfsdf';
end;

остальное думаю несложно домыслить.


Johnmen   (2007-01-20 22:20:00) [16]

Ну в целом ты правильно делаешь. В чём проблема то?


NikNet   (2007-01-20 21:28:00) [17]

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


Desdechado   (2007-01-20 20:51:00) [18]

> Составил такой код но он работает только при наборе данных
Не понял. Тебе нужны колонки без данных?


Наверх

Титульная страница Поиск, карта сайта Написать письмо