![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LoockUp поля
ORMADA © (2004-06-01 09:51:00)Добрый ддень!
Делаю в рантайм лукап поля и столкнулся со следующим:
если квери (TADOQuery) создать в рантайм
т.е.
with TADOQuery.creat(self) do...
и потом назначить для LookupDataSet то дельфи ругается типа неправильно заданы значеня для лукап полей.
в тоже время если где то в public/private разделе объявить
Query1: TADOQuery; и потом созадать его
Query1 := TADOQuery.Create(self);
with Query1 do..
то всё отлично работает...
Можно ли как-нить этого избежать ? т.е. избежать объявления всех переменных типа квери кот. могут быть понадобиться (т.к. в моей программе их кол-во на этапе проектирования и разработки неизвестно).
Vlad (2004-06-01 12:42:00) [1]
> ORMADA © (01.06.04 12:37) [10]
Значит АП был прав - ошибка внутри with :-)
ORMADA (2004-06-01 12:37:00) [2]2 Vlad СПАСИБА!
Влад ты оказался прав косяк был действительно в Self.FindComponent('TADOQuery10');
Он(с моей помощью канечна) просто не там искал компонент.
Всем СПАСИБО!
ORMADA (2004-06-01 12:30:00) [3]2 V-A-V панятна что можно но это родительская универсальная форма дл всех справочников от которой потом будет происходить наследование! во
V-A-V (2004-06-01 12:23:00) [4]Слушай а зачем их извращатся в рантайме создавать, может просто в дизайнтайме их сразу нашлепать...
Vlad (2004-06-01 12:20:00) [5]
> ORMADA © (01.06.04 12:09) [6]
Ты создаешь ADOQuery, у которого owner - self (то есть наверняка - форма)
Затем пытаешься найти его в списке дочерних компонент StringField
Об этом говорит конструкция:
with TStringField.Create(ADOQuery1) do
...
... FindComponent('TADOQuery10');
То есть тоже самое что так: StringField.FindComponent('TADOQuery10')
тогда уж указывай явно: Self.FindComponent('TADOQuery10');
Хотя возможно проблема и не в этом.
ORMADA (2004-06-01 12:09:00) [6]дык лукап поля я тож создаю в рантайме
нееее это не тож самое, там я создаю динамо лукап поле предварительно создав динам квери и в свойство лукап поля для значений заношу имя квери из которого их надо брать.
Иль я неправильно тя понял ?
Vlad (2004-06-01 12:01:00) [7]
> with TStringField.Create(ADOQuery1) do
...
затем
> FindComponent('TADOQuery10');
Это тоже самое что написать StringField.FindComponent('TADOQuery10')
Ку ?
sniknik (2004-06-01 11:41:00) [8]проверь значение LookupDataSet после присвоения.
ORMADA (2004-06-01 10:54:00) [9]Люююдиии! Хде вы ?
Никто с таким не сталкивался ?
ORMADA (2004-06-01 10:04:00) [10]2 Anatoly Podgoretsky
Анатолий! С чего вы это решили ?
with TADOQuery.Create(self) do
begin //--- Создаём новый ADOQuery для LoockUp поля ---begin------
Name := 'TADOQuery10';
Connection := ADOConnection1;
SQL.Add('select * from спр1');
Open;
end; //--- Создаём новый ADOQuery для LoockUp поля ---end---------
затем
with TStringField.Create(ADOQuery1) do
begin
FieldKind := fkLookup;
FieldName := 'LoockUp1';
DataSet := ADOQuery1;
Name := 'LoockUp1';
KeyFields := 'СсылкаНаСпр1';
LookupKeyFields := 'Код';
LookupResultField := 'Имя';
LookupDataSet :=TADOQuery(FindComponent('TADOQuery10'));
ADOQuery1.FieldDefs.Add(name, ftString, 50);
end;
В чём ошибка ?
Anatoly Podgoretsky (2004-06-01 10:00:00) [11]ошибка внутри with