Текущий архив: 2006.01.08;
Скачать: CL | DM;
Вниз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;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.01 c