Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2010, 01:17   #1
Doser
 
Регистрация: 13.10.2009
Сообщений: 6
По умолчанию Создание поля подстановки

Вот код
Код:
fld:=TStringField.Create(nil);
fld.Size:=50;
fld.DisplayLabel:='t1';
fld.DisplayWidth:=50;
fld.FieldKind:=fkLookup;
fld.FieldName:='t1';
fld.KeyFields:='Type';
fld.LookupDataSet:=ADOTable2;
fld.LookupKeyFields:='id';
fld.LookupResultField:='name';
fld.Name:='ADOTable1t1';
fld.Lookup:=true;
ADOTable1.Active:=False;
fld.DataSet:=ADOTable1;
ADOTable1.Active:=True;
Column:=DBGrid1.Columns.Add;
Column.Field:=fld;
Column.Alignment:=taLeftJustify;
Column.Title.Caption:='Test1';
Column.Width:=50;
Вылетает с ошибкой
'ADOTable1: Field 'Type' not found'.

Если перед этим в диспетчере объектов выбрать ADOTable1 -> Fields -> Add all fields то все будет работать как надо, но такой вариант не подходит.

Помогите кто что знает
Doser вне форума Ответить с цитированием
Старый 06.01.2010, 01:35   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не используйте ключевых слов в названиях таблиц, полей и т.п.
Неужели это настолько трудно для разумения?
mihali4 вне форума Ответить с цитированием
Старый 06.01.2010, 01:44   #3
Doser
 
Регистрация: 13.10.2009
Сообщений: 6
По умолчанию

Нет, проблема не в этом.
Doser вне форума Ответить с цитированием
Старый 06.01.2010, 08:07   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Если перед этим в диспетчере объектов выбрать ADOTable1 -> Fields -> Add all fields то все будет работать
естественно теперь ADOTable1 знает какие поля он должен получать,
следовательно надо добавить что-то вроде
ADOTable1.Fields.Add(...)
для нужных полей
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.01.2010, 08:44   #5
Doser
 
Регистрация: 13.10.2009
Сообщений: 6
По умолчанию

Так то оно так. В таком случае надо создавать еще поле куда будет осуществляться подстановка. Но самое то что интересное ведь эти все нужные мне поля создаются автоматически при активации adotable! Например если убрать добавление этого нового поля и сделать нечто типа ADOTable1.FieldByName('Type') то это поле будет найдено! Никакой ошибки при этом не возникает. Хотя мы просто активировали таблицу и не добавляли поля. Следовательно они добавляются сами где то внутри компонента. Логично? Но когда пытаемся добавить наше созданное поле получаем ошибку что будто нет такого поля. Я могу тут еще предположить что просто на этапе этом поля еще не добавлены. Но с другой стороны если мы до этого создадим поле и потом такое же поле добавится автоматически не будет ли у нас дубликатов.
Как то я запутался со всем этим%)
Doser вне форума Ответить с цитированием
Старый 06.01.2010, 14:25   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Doser Посмотреть сообщение
Вот код
Код:
...
fld.KeyFields:='Type';
...
fld.DataSet:=ADOTable1;
...
Вылетает с ошибкой
'ADOTable1: Field 'Type' not found'.

Если перед этим в диспетчере объектов выбрать ADOTable1 -> Fields -> Add all fields то все будет работать как надо, но такой вариант не подходит.
Ну вот, недаром говорят - "утро вечера мудренее"...
Поменяйте местами эти две строки.
Сначала-то нужно датасет определить, а уж потом к его полям обращаться, не так ли ?
mihali4 вне форума Ответить с цитированием
Старый 07.01.2010, 08:44   #7
Doser
 
Регистрация: 13.10.2009
Сообщений: 6
По умолчанию

Все логично, тока поменяв вылетает с ошибкой. Буду разбираться дальше
Doser вне форума Ответить с цитированием
Старый 08.01.2010, 08:32   #8
Doser
 
Регистрация: 13.10.2009
Сообщений: 6
По умолчанию

сотворилось вот что
Код:
fld:=TStringField.Create(nil);
fld.Size:=25;
fld.FieldName:='type';//изменилось тут 
fld.DisplayLabel:='';
fld.FieldKind:=fkLookup;
fld.FieldName:='type';
fld.LookupDataSet:=ADOTable2;
fld.LookupKeyFields:='id';
fld.LookupResultField:='name';
fld.KeyFields:='Type';
ADOTable1.Active:=False;
fld.DataSet:=ADOTable1;
ADOTable1.Active:=True;
fld.Lookup:=true;
Column:=DBGrid1.Columns.Add;
Column.Field:=fld;
fld.DisplayWidth:=25;
Column.Width:=25;
Column.Title.Caption:='t1';
Column.Alignment:=taLeftJustify;
ADOTable2.Active:=True;
ADOTable1.Active:=True;
да оно не выдает ошибок но при этом дбгрид перестает отображать записи, будто adotable деактивировали. сначала думал он вырубается где, сделал проверку все работает все необходимые компоненты активны.
Doser вне форума Ответить с цитированием
Старый 11.01.2010, 20:09   #9
Doser
 
Регистрация: 13.10.2009
Сообщений: 6
По умолчанию

Походу все же для этого дела необходимо предварительно добавлять поле на которое мы ссылаемся в создаваемом поле. По другому никак не получается.

Код:
fld:=TStringField.Create(nil);
fld.Size:=25;
fld.DisplayLabel:='';
fld.FieldKind:=fkLookup;
fld.FieldName:='t1';
fld.LookupDataSet:=ADOTable2;
fld.LookupKeyFields:='id';
fld.LookupResultField:='name';
fld.KeyFields:='Type';
fld.Lookup:=true;

fld2:=TIntegerField.Create(nil);
fld2.FieldKind:=fkData;
fld2.Name:='t2';
fld2.FieldName:='Type';

ADOTable1.Active:=False;
fld2.DataSet:=ADOTable1;
fld.DataSet:=ADOTable1;

ADOTable1.Active:=True;
Column:=DBGrid1.Columns.Add;
Column.FieldName:='t1';
fld.DisplayWidth:=25;
Column.Width:=25;
Column.Title.Caption:='type';
Column.Alignment:=taLeftJustify;
работает так как мне необходимо, только тут еще надо создавать и добавлять все остальные поля которые необходимо отображать, в итоге код получится более громоздким.
Doser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VB6 создание игрового поля ZotaC Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 23.12.2010 22:01
Создание поля ввода на панели задач Antonio_M Общие вопросы C/C++ 2 13.11.2009 01:15
Возможно ли использование нескольких столбцов подстановки для одного поля? jonni Microsoft Office Access 10 20.05.2009 22:25
Создание поля Итого Jadovi Microsoft Office Access 1 04.02.2009 15:54