Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

Как сделать Lookup поле с динамическим списком?   Найти похожие ветки 

 
lightix   (2003-04-04 10:01) [0]

Помогите разобраться с такой проблемой:
на Query есть Lookup поле, в качестве списка к которому прицеплено другое Query. Необходимо чтобы для каждой записи этот список был в зависимости от ключа разным. Т.е. например в таблице-справочнике есть записи вида (цех, номер отдела), а в другую таблицу нужно вносить цех, и в зависимости от этого цеха подтягивать в список отделов (TLookupComboBox) ОТДЕЛЫ ТОЛЬКО ВВЕДЕННОГО цеха. И так для каждой записи.
Пробовал пересобирать Query-справочник отделов для каждой записи - получается что для всей таблицы действует последний запрос и некоторые поля пустые т.к. в списке не хватает значений для них.
Подскажите что можно сделать в данном случае?


 
Lord Warlock ©   (2003-04-04 10:09) [1]

Использовать параметр в запросе-справочнике, в него передавать номер цеха из текущей записи


 
Johnmen ©   (2003-04-04 10:17) [2]

Може достаточно ставить фильтр на лукапный НД.
А чтобы не пропадало - вкл.кеширование лукапного поля...


 
lightix   (2003-04-04 10:20) [3]

Так и делал. Не то.
Например если у меня 2 записи в таблице:
CEX NOTD
1 2
2 5
и в 1-м цехе 2 отдела, а во 2-м - 5 отделов, то после того как параметр передастся для 1-й записи, в справочнике будут 2 записи и для записи со 2-м цехом не хватит значений в этом списке, будет светиться пустота ....
Или я не там передаю параметр - в AfterScroll на Query и OnChange на поле CEX на Query ?


 
lightix   (2003-04-04 10:21) [4]

Johnmen, расскажи подробнее про фильтр - где он находится и чего включить?


 
Соловьев ©   (2003-04-04 10:23) [5]

что-то вообще не понятно что у тебя происходит. Приведи структуру своих таблиц.


 
lightix   (2003-04-04 10:33) [6]

вот таблица, на которой работает эта программа
desc s_trud
KZ NUMBER(2)
CEX NUMBER(3)
DOLJ NUMBER(8)
RAZR NUMBER(1)
NOTD VARCHAR2(2)
FL_DIAP NUMBER(1)
вот таблица, из которой нужно сделать список отделов
desc s_otd
KZ NOT NULL NUMBER(2)
CEX NOT NULL NUMBER(3)
NOTD NOT NULL VARCHAR2(2)
NAOTD VARCHAR2(70)

PS Попробовал только что в справочнике выбрать все, без параметра, и для этого Query менять Filter "CEX="цеху в этой записи. Работает, но всеравно пропадают значения.
Может не там вставил?
list_notd->Filter="CEX="+
q_s_trud->Fields->FieldByName("CEX")->AsString;
вот это вставил в AfterScroll на и OnChange на цех.


 
Johnmen ©   (2003-04-04 10:39) [7]

Извени, повторюсь.
Чтобы не пропадало - кеширование лукапного поля...
Причем в момент получения лукапного НД (Open), фильтр на нем не должен стоять !



 
lightix   (2003-04-04 10:44) [8]

Johnmen, сделал LookUpCache=true - всеравно пропадает :(


 
MsGuns ©   (2003-04-04 10:45) [9]

Отказаться от LookUp как от лукавого и использовать "дочерний" НД, получаемый по "горячему" параметрическому запросу. Отображается в гриде, положенном в отд.панель или форму, активизируемую по нажатию соотв.кнопки в ячейке грида, отображающего осн. НД. Преимуществ много,- одно из них - возможность "на лету" правки самих справочников.


 
Соловьев ©   (2003-04-04 10:46) [10]

в какую таблицу что ты вставляешь? и опиши русскими словами поля.


 
Johnmen ©   (2003-04-04 10:51) [11]

да-да-да, давай подробно и по-русски :)


 
lightix   (2003-04-04 10:51) [12]

Соловьев, в таблицу S_TRUD вставляю
CEX (выбирается из справочника цехов)
и NOTD - вот его нужно выбирать из справочника S_OTD по CEX, введенному выше.
И так для каждой записи


 
Соловьев ©   (2003-04-04 10:55) [13]


> CEX (выбирается из справочника цехов)

это что за таблица?


 
lightix   (2003-04-04 11:03) [14]

SQL> desc s_pz;
KZ NOT NULL NUMBER(2)
CEX NOT NULL NUMBER(3)
NACP VARCHAR2(40)
NACK VARCHAR2(20)
PRB1 NUMBER(1)
PRB2 NUMBER(1)
LANG VARCHAR2(2)
DATEN DATE
DATEK DATE
KGR NUMBER(2)
она тоже загнана в DBLookUpComboBox как список


 
Соловьев ©   (2003-04-04 11:11) [15]

три набора данных. 1-й твоя редактируемая таблица с двумя LookUp полями . 1-е поле выбирается из Query:

select * from s_pz

Повесить на обработчик события AfterScroll такой код:
With Query2 do
begin
Close;
ParamByName("pCex").AsInteger := Query.FieldByName("CEX").AsInteger;
Open;
end;

А в свойстве SQL написать :

select * from s_otd where cex=:pCex



 
lightix   (2003-04-04 11:22) [16]

я именно так и делал. вот чего получается - это основная Query (S_TRUD)
CEX NOTD
1 14
2 15

в справочнике S_OTD для 1 цеха 14 отделов, для 2-го 15 отделов.
когда становишься на 1-ю запись, во 2-й пропадает NOTD, т.к. в Query2 список из 14-ти значений.


 
Соловьев ©   (2003-04-04 11:26) [17]


> на 1-ю запись, во 2-й пропадает NOTD, т.к. в Query2 список
> из 14-ти значений

не понял как это???

на первую запись чего?

2-й кого???


 
lightix   (2003-04-04 11:34) [18]

У меня на форме DBCtrlGrid - сразу видно несколько записей. Вот и получается, что когда в списке значений меньше чем значение в одной из записей, то в ней (записи этой) вместо значения высвечивается пустота (что вполне логично, т.к. этого значения нет в списке)


 
Соловьев ©   (2003-04-04 11:45) [19]

понял, млин, что-то торможу :)))))

> Johnmen © (04.04.03 10:17)
> Може достаточно ставить фильтр на лукапный НД.

а потом отключать его после выбора код поменяется так:

AfterScroll:
...
Query2.Filter = "СУЧ = "+QuotedStr(Query.FieldByName("CEX").AsString);
...



 
lightix   (2003-04-04 11:57) [20]

Угу, работает, только сейчас наблюдается такое:
в таблице 2 записи - см выше
при выполнении запроса все светится красиво. но когда становлючсь на запись с 15-ю отделами, в ней вместо отдела (15) всетится пустота, хотя в списке есть все значения (все 15), и последнее (15) не выбирается :(( Только если выбрать 14, а потом 15, только тогда номально получается... Не пойму, почему так?
И в какой именно момент (какое событие) отключать фильтр?


 
lightix   (2003-04-04 13:32) [21]

Написал вот так в AfterScroll:
Query2->Filter="CEX="+Query1->Fields->FieldByName("CEX")->AsString;
Query->Refresh();

Так работает нормально, без "пропадания", но заметно тормозит:(
Может есть какие соображения по этому поводу?



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

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
14-77090
Vadim 1
2003-04-06 20:47
2003.04.24
Базы данных


1-76973
Alex-21
2003-04-12 20:51
2003.04.24
TabSheet


1-76981
Вадим
2003-04-08 18:30
2003.04.24
Количесвто видимых строк


1-77003
Spartak
2003-04-14 10:02
2003.04.24
как из строки с путём к файлу получить расширение файла ?


7-77189
YM
2003-03-06 16:10
2003.04.24
Прямой доступ к диску