![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как предварительно назначить именна 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]> Составил такой код но он работает только при наборе данных
Не понял. Тебе нужны колонки без данных?