Консультация № 182528
16.03.2011, 17:57
55.00 руб.
0 2 0
день добрый уважаемые эксперты.... Перейду к смыслу... Вообщем у меня следующий вопрос:
как создать динамически (во время выполнения программы) TIBQuery, в нем создать поле типа fkLookup, а потом связать данное поле с компонентом, к примеру с TDBCombobox..
я делал следующим отразом, создавал TIBQuery, отдельно создавал поле типа fkLookup(fild:TFild; fild:=TFild.creat(TIBQuery) Fild.FieldKind:=fkLookup ..... (вопрос: как связать с определённым полем в TIBQuery?)) a потом не знаю как связать с компонентом((((
либо связываю и компилятор дает мне ошибку мол не может быть лукап полем
может предложите другой вариант?
если нет то как узнать полное имя созданного поля в TIBQuery.
желательно бы исходник а то отдельными строками не совсем понятно(((

очень нужно, очень очень((( я уже ночами не сплю, вот здесь закралась ошибка и всё(((

Обсуждение

Неизвестный
18.03.2011, 11:37
общий
для отображения Lookup поля нужно использовать DBLookupComboBox.
тогда в полях DBLookupComboBox1.DataSource и DBLookupComboBox1.DataField нужно указать источник данных (datasource связанный с Вашим Query) и fkLookup поле соответственно.
создание fkLookup поля:
Код:

// создаем lookup поле в query
// fld: TField;
// query: TADOQuery (необходимо предварительно создать) - основной набор данных, в нем будет lookup поле
// query_look: TADOQuery (необходимо предварительно создать) - набор данных для подстановки;
fld:=TField.Create(nil);
fld.FieldName:='Новое поле';
fld.FieldKind:=fkLookup;
fld.KeyFields:='Поле данных';
fld.LookupDataSet:=query_look;
fld.LookupKeyFields:='Отображаемое поле';
fld.LookupResultField:='Возвращаемое поле';
//добавляем lookup поле в query
query.Fields.Add(fld);


но лучше, с моей точки зрения, обойтись без fkLookup поля. Для этого необходимо просто создать (добавить) DBLookupComboBox1 и самостоятельно задать следующие свойства (аналогично тому, что Вы указывали бы в fkLookup поле)
DBLookupComboBox1.ListSource: TDataSource - источник данных для подстановки;
DBLookupComboBox1.ListField: TWideString - поле таблицы (запроса), значения которого будут отображаться в DBLookupComboBox при его открытии;
DBLookupComboBox1.KeyField: TWideString - ключевое поле таблицы (запроса) из ListSource, которое будет непосредственно записываться;
Код:

DBLookupComboBox1.DataSource:=dsource;
DBLookupComboBox1.DataField:='Поле данных';
DBLookupComboBox1.ListSource:=dsource_look;
DBLookupComboBox1.ListField:='Отображаемое поле';
DBLookupComboBox1.KeyField:='Возвращаемое поле';
Неизвестный
18.03.2011, 11:45
общий
использовал ADO, думаю для InterBase аналогично (нет возможности проверить для IB)
Форма ответа