Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.016 c
3-1131976516
Ega23
2005-11-14 16:55
2006.01.08
А как сделать Locate по полю типа GUID?


1-1133883673
Харько
2005-12-06 18:41
2006.01.08
Тихо шифером шурша....


2-1134632711
Dmitriy G.
2005-12-15 10:45
2006.01.08
AV на FreeLibrary


14-1134553613
Piter
2005-12-14 12:46
2006.01.08
3gp кодек


6-1127661263
AlCache
2005-09-25 19:14
2006.01.08
IdHTTP1.Get, я что-то делаю неправильно?