Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо