Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

Как сделать 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.007 c
7-77184
Senka
2003-03-03 18:31
2003.04.24
Com порт


1-77029
Evg12
2003-04-14 14:54
2003.04.24
Как выполнить функцию или процедуру имя которой в переменной


1-76898
dimonf
2003-04-14 19:53
2003.04.24
От какого модуля наследуеться TStringProperty???


7-77209
Tylli
2003-03-05 08:23
2003.04.24
Скрытие установленных программ


1-76914
Blond
2003-04-15 08:33
2003.04.24
Выделение обьектов на форме





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский