|
|
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
Как правильно настроить Lookup-поля в такой ситуации? Имеется таблица абонентов A. Абонент имеет адрес, нас интересует улица и город. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. Я сделал так (используя FIBPlus, сервер БД FB) 1. Dataset dsA имеет поля S_ID, T_ID, для них созданы Lookup-поля A_SName (отображает название улицы) и A_TName (назв. города). 2. для поля A_TName создан Dataset dsTown, SelectSQL = 'SELECT T.TOWN_ID, T.TOWN_NAME FROM TOWN ORDER BY 1' 3. для поля A_SName создан Dataset dsStreet, SelectSQL = 'SELECT S_STREET_ID, S_STREET_NAME FROM STREET WHERE TOWN_ID = :TOWN_ID ORDER BY 1' 4. dsTown и dsStreet связаны как Master-Detail. 5. Lookup поля A_SName и A_TName настроил на соответствующие Dataset'ы (все правильно) Такая незадача: меняем у одного из абонентов город, и у других абонентов (где город другой) в поле A_SName теряются улицы, поскольку набор dsStreet переоткрывается из-за смены параметра :TOWN_ID. Реальная задача сложнее, там вместе с улицами задействованы еще и районы города. У кого был опыт по организации такого редактирования, подскажите оптимальное решение, плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 15:51 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
Ты хотел сказать, не выводятся. Ну, не знаю, как бы я сделал.... :) Мысли всух: 1. Редактирал в отдельной форме.!! 2. Можно держать еще три фиксированых компонента dataset с полным списком городов. В lookup'ах брать данные из фильтрованых datasetов. 3. Если используешь sdac, можешь открывать запрос полностью со всеми inner join'ами. + 3 твои dataset'a. После редактирования делаешь RefreshRow. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 16:25 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
очищать надо зависымые поля на onChange мастер записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 16:35 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
to Sash* ты сам понял что сказал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 17:56 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
Мысли вслух: Вряд-ли лукапы здесь лучшее решение (ИМХО)...Я бы возвращал в единственный(!) датасет уже соединенные поля из всех трех таблиц, включая описания городов и улиц. А на изменения колонок 'назв. города' и 'назв. улицы' ставил обработчик, к-рый запросом проверяет наличие такой записи в справочной таблице. А где же здесь поиск - спросите ? А поиск в вызываемой доп. форме, к-рая активируется кнопочкой у соотв. колонки в гриде. И которая при активации выполняет требуемый запрос к БД, возвращая результирующую выборку. (Это вместо лукапа). Туда можно передавать доп. усл. типа id_города, чтобы в результирующем запросе возвращались только нужные записи. Ну и т.д. Немного громоздко выглядит? Это только при создании такой формочки придется (совсем чуть-чуть!) повозиться, зато потом ее легко использовать во всех аналогичных ситуациях, и не только в гридах. И оставить лукапы только на самые простейшие случаи (из max 5-10 строк). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 17:57 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
Delphiman to Sash* ты сам понял что сказал? если не догоняешь не повод грубить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 18:02 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
Стандартный Lookup ты скорее всего не настроиш. В большинстве случаев Lookup срабатывает при каждом обращении к записи (GetRecord). Соответственно если ты наложил фильтр на LookupdataSet, то часть занченний (не попавшая под условия фильтра) просто не будет найдена и отобразится пустотой. Для этого нужно, чтобы компоненты, через которые ты лезеш в БД поддерживали хитрый режим, при котором данные выбираются полным select-ом (со всеми Join и вычисляемыми полями), а lookup и вычисляемые поля считались только при редактировании. (Может быть это похоже на LookupCache, но я в своих компонентах это по другому прикручивал). Можно попытаться переопределить функцию Lookup, но это все неправильно. Если твои компоненты сами этого не делают, то прийдется обходиться модальными справочниками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 18:36 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
хм не знаю как на стандартных - я делал на девках - нормально работало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 18:45 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
Народ! Спасибо за участие в решении моей проблемы. Самой полезным для меня было авторитетное мнение о том, что стандандартными возможностями Lookup полей задача не решается. Мысль о том, чтобы редактировать улицы в модальной форме у меня конечно была, но в моем случае это не подходит. Просто почуствуйте себя в роли оператора, который забивает сотню записей, и для каждой записи в нескольких полях вынужден щелкать на кнопку, открывать форму, выбирать запись, закрывать форму. А по моей идее он нажимает Ins для ввода новой строки, быстро набирает каждое поле (как в Excele), а для полей со значениями из справочника ему достаточно набрать первые 2-3 буквы, не открывая никаких новых окон. Короче, я решил использовать свойство PickList у TColumnEh из грида. При переходе на редактирование нужного поле нужно будет перезаполнять PickList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 07:34 |
|
||
|
Lookup на 2 зависимых поля в гриде
|
|||
|---|---|---|---|
|
#18+
мне удалось сделать зависимое поле через свойство Filter и два события: procedure TfmOros.dsChecksDataChange(Sender: TObject; Field: TField); begin if Field = nil then begin qLookupSourceFld.Filter := ''; end; end; procedure TfmOros.qCheckssourcefldlookupGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin qLookupSourceFld.Filter := 'sourceid = '+FloatTostr(qChecksSOURCEID.AsFloat); Text := TField(Sender).asString; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 11:56 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32810842&tid=2039241]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 344ms |

| 0 / 0 |
