Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Вниз

Как предварительно назначить именна DBGrid колонкам   Найти похожие ветки 

 
NikNet ©   (2007-01-20 20:04) [0]

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

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

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;


 
Desdechado ©   (2007-01-20 20:51) [1]

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


 
NikNet ©   (2007-01-20 21:28) [2]

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


 
Johnmen ©   (2007-01-20 22:20) [3]

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


 
sniknik ©   (2007-01-20 22:29) [4]

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

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

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


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

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


 
Johnmen ©   (2007-01-20 23:15) [6]


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


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


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

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


 
MsGuns ©   (2007-01-21 01:10) [8]

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

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

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

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


 
NikNet ©   (2007-01-21 09:27) [9]

СУБД Sybase

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

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

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


 
sniknik ©   (2007-01-21 11:17) [10]

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

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


 
NikNet ©   (2007-01-21 15:17) [11]

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


 
Anatoly Podgoretsky ©   (2007-01-21 17:18) [12]

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


 
MsGuns ©   (2007-01-21 20:07) [13]

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

Из анкеты:

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

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


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

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

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


 
sniknik ©   (2007-01-21 20:49) [14]

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


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

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

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


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

Если я правильно понял, требуется визуализировать активный набор данных (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;


 
MsGuns ©   (2007-01-22 10:55) [17]

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

Не-а

>delphim   (22.01.07 05:29) [16]

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


 
Sergey13 ©   (2007-01-22 11:21) [18]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.039 c
2-1169557177
Гость_
2007-01-23 15:59
2007.02.11
DBGrid&DBGridEh


15-1168916009
Юнит
2007-01-16 05:53
2007.02.11
Как прописать {$DEFINE UseBox}, чтобы она была видна во всех юнит


15-1169118389
Ксардас
2007-01-18 14:06
2007.02.11
подскажите плз сервер


15-1169091964
Одя
2007-01-18 06:46
2007.02.11
Существуют ли программы перевода сишных макросов в Паскаль?


2-1169733873
Help!
2007-01-25 17:04
2007.02.11
Runtime





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский