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

Вниз

MultiSelect в Гриде   Найти похожие ветки 

 
Дмитрий_Б   (2005-11-10 13:45) [0]

Здравствуйте. Такая задача: необходимо выделять вгриде несколько Master-записей, и в другом гриде выводить Detail-записи всех выделенных в первом гриде Master-ов. Пока мысль такая:
 в обработчике события OnCellClick использовать св-во Grid.Selection, получать master_id -ы выделенных записей, переопределять текс Detail-запроса, указывая в нем where detail_id in (master_id1, master_id2, .. , master_idN) и открывать Detail-запрос заново.

Может есть решение проще и эффективнее?


 
Sergey13 ©   (2005-11-10 13:57) [1]

2Дмитрий_Б   (10.11.05 13:45)
А у тебя БД не сойдет с ума при таком подходе?

-Ну и запросы у вас, - сказала БД и повисла. (с) анекдот


 
Дмитрий_Б   (2005-11-10 14:02) [2]

Тоже думаю, что сойдет с ума. Может Вы что то делали подобное ?


 
Sergey13 ©   (2005-11-10 14:07) [3]

2[2] Дмитрий_Б   (10.11.05 14:02)
Ты отвлекись от БД на время. Подумай - зачем тебе такая информация: "Эта куча принадлежит той группе"? Кому конкретно чего и сколько - непонятно. Оно надо?

Возвращаясь к БД. Может лучше фильтр наложить на мастера (чтобы "лишние" не отвлекали) и показывать также как и раньше - нормальный м-д?


 
Dioman ©   (2005-11-10 14:10) [4]

а чем этот способ не устраивает?


 
seg   (2005-11-10 14:17) [5]

в обработчике события OnCellClick использовать св-во Grid.Selection, получать master_id -ы выделенных записей, переопределять текс Detail-запроса, указывая в нем where detail_id in (master_id1, master_id2, .. , master_idN) и открывать Detail-запрос заново.

Пользователь будет ждать переоткрытие запроса после КАЖДОГО клика?
Может поставить кнопочку, при нажатии на которую откроются все дочерние записи выбранных записей?

Можно сделать еще лучше - поставить еще одно окно, в которое пользователь будет перекидывать необходимые мастер-записи, потом кнопочкой открывать.
Затем полученные наборы мастер-записей сохранять в базе, чтобы пользователь не выделял каждый раз одни и те же записи, а вызывал готовый набор записей.


 
Дмитрий_Б   (2005-11-10 14:19) [6]

Все и огорчение в том что надо их все видеть. Эта куча - содержимое заявок, оператор их наблюдает глазами и подбирает соответствующие им данные из другой кучи. Просто видеть их сразу все ей (оператору) будет удобнее.


 
Дмитрий_Б   (2005-11-10 14:21) [7]

Да, от клика отказался, делаю с кнопочкой.


 
Dioman ©   (2005-11-10 15:35) [8]

а если в детайл таблице вызывать сразу все записи... а при переходе в мастер таблице просто фильтр изменять? Если записей не много, то на локальной машине все должно быстро работать


 
antoxa2005   (2005-11-11 12:19) [9]


> елять текс Detail-запроса, указывая в нем where detail_id
> in (master_id1, master_id2, .. , master_idN) и открывать
> Detail-запрос заново.


Я так делал работает !


 
ANB ©   (2005-11-11 16:42) [10]


> where detail_id in (master_id1, master_id2, .. , master_idN)
> и открывать Detail-запрос заново.

Запрос будет не параметризированный. Если БД локальная - то, в принципе, по барабану. А если сервер, то некузяво. Есть решение - но громоздкое, посему на любителя, не настаиваю :

Заводим еще одну таблицу только для галок. Привязываем либо к сессии (оракл), либо к пользователю, но тогда нужно обеспечить, чтобы юзеры не могли входить под одним именем. В доп. поле будем писать ID выбранной записи мастер-таблицы. В грид выводим поле с галками. При клике по галке в гриде в таблицу галок заносим или удаляем строки. Потом выборка делается без параметров одним запросом.

А стандартный мастер-детайл не умеет по нескольким мастер-строкам работать.


 
seg   (2005-11-11 16:54) [11]

Что мешает написать "select id in (список мастер ID)"
И открыть одним запросом после выбора пользователем всех мастер-записей путем нажатия на кнопочку?

И не нужно городить огород с дополнительными таблицами.


 
ANB ©   (2005-11-11 17:26) [12]


> seg   (11.11.05 16:54) [11]

А я и писал - что это на любителя. А твое предложение уже было выше. Там один минус - такой запрос не параметризируешь. А, например, оракл такие вещи не сильно любит.


 
Dioman ©   (2005-11-11 17:52) [13]

оракл будет перекомпилировать запрос с константами каждый раз!!!! тогда как с параметрами не будет... ). Но если тестируемая производительность нормальная - то в принципе можно.

Я не могу врубиться почему там медленно работает??? может проблема не в этом... может что-то другое тормозит задачу????

А чем не нравится способ с фильтрами??? помойму фильтрация на клиенте будет работать быстрее всего.


 
ANB ©   (2005-11-14 10:05) [14]


> Dioman ©   (11.11.05 17:52) [13]

Перекомпиляция, в принципе, при не очень сложном запросе много времени не занимает и, если оператор SQL выполняется не пакетно в цикле, то, как правило, на это можно забить. Тут хуже другое - если конкретный запрос используется довольно часто (а в связке мастер-детал так и есть), то этот запрос забъет весь процедурный кэш оракла и вытеснит из него другие запросы, даже параметризованные. А это уже не кузяво.

Эффективность фильтрации на клиенте будет сильно зависить от размера таблиц. Плюс пользователь перестанет видеть изменения, сделанные другими пользователями - придется ручками делать полный рефреш детал таблицы. По кнопке - пользователь будет ленится, так как при приличном объеме детал таблицы это будет долго. По таймеру - это будет вообще убийца сервера и сетки. Отсюда пойдут грабли.


 
Sergey13 ©   (2005-11-14 10:22) [15]

2[14] ANB ©   (14.11.05 10:05)
> Тут хуже другое - если конкретный запрос используется довольно часто (а в связке мастер-детал так и есть)
При такой постановке вопроса (по кнопке) тут уже нет М-Д связи. Просто выборка по, на лету формируемому, условию.
Другой вопрос, что узеру будет влом тыкать и выделять записи. Он скорее всего выделит все и скачает всю детальную таблицу.
Я бы пошел по пути максимального ограничения мастер-таблицы. А от нее уже плясал в детальной. Т.е. запрос к детали будет повторять (частично) мастер-запрос  - он (слегка модифицированный) будет в IN подзапросе детали.


 
Дмитрий_Б   (2005-11-14 12:13) [16]

Какой живой интерес вызвал мой вопрос :)
Большой спасибо всем!!!
Сделал select id in (список мастер ID), запрос открываю при нажатии на кнопку. Выборка совсем маленькая и запрос выполняется без видимых задержек. Причем процедура эта будет делаться всего несколько раз в день.
Еще раз всем спасибо.


 
КиТаЯц ©   (2005-11-14 12:16) [17]


> Sergey13 ©   (10.11.05 13:57) [1]
> -Ну и запросы у вас, - сказала БД и повисла. (с) анекдот

:)))))



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

Форум: "Базы";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
3-1131976516
Ega23
2005-11-14 16:55
2006.01.08
А как сделать Locate по полю типа GUID?


2-1134898227
з. танька
2005-12-18 12:30
2006.01.08
TWebBrowser


1-1134054992
Германн
2005-12-08 18:16
2006.01.08
AV связанное TCustomForm.GetMonitor


2-1135053938
Officeman
2005-12-20 07:45
2006.01.08
Приложение для КПК


14-1134536760
vajo
2005-12-14 08:06
2006.01.08
антивирусы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский