|
Проблема Retieve
|
|||
---|---|---|---|
#18+
У меня проект постоен по достаточно страндартной идеологии список/редактор. Список - это Grid Datawindow, и когда выбирается один из его элементов (строка) вызывается FreeForm редактор. Проблема состоит в том, что запрос Retrieve у списка может тащить очень много данных. Запрос типа: select c.blabla, ad.blabla ... from customer as c join adress as ad join ..., танет все на клиента, даже то, что юзер никогда не будет смотреть. Можно ли как-то управлять процессом retrieve, например вычитавать данные по порциям во время скролинга. Как Вы решаете подобные проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 11:50 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
авторнапример вычитавать данные по порциям во время скролинга Свойство Retrieve -> Rows as Needed ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 12:16 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
Спасибо, а как тогда обстоят дела с поиском данных внутри dw, бегунок некрасиво отображается и можно ли сделать сортировку кликом на столбце? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 12:33 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
Можно, конечно, см. собітия DW - clicked или в єтом роде и обрабатівай ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 13:23 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
Да имеется ввиду не обработка событий как таковых, а то, что будет обрабатываться: только часть данных которые пользователь видит в текущий момент или необходимо перестраивать сам запрос у ретрива и выборки данных снова. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 13:46 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
В моей нынешной конторе столкнулся довольно с интересной идеей, касающейся сей проблемы. Так вот, узер нажимает на кнопку "Получить данные", появляется окно в котором можно выбрать таблицы, которые нужно приджойнить к селекту, на котором посторен DW. К примеру, есть таблица счетов клиентов (ОЧЕНЬ большая), она выбирается целиком в DW. До ретрива вылезает окно в котором юзер выбирает таблицу депозитов клиентов, может выбрать столбцы из этой таблице по которым желает установить фильтр. В результате в DW оказывается не вся таблица счетов, а только те которые относятся к депозитам. Причем система построена так, что добавить таблицу для джоинта не составляет никакого труда. Естественно юзерозверь видит названия таблиц и столбцов по-русски. Система достаточно простая и эфективная. Если интересно, могу рассказать подробнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 14:08 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
Black SavageЕсли интересно, могу рассказать подробнее. Расскажи. Используются таблицы "pbcat*" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 14:13 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
ZiZu Да имеется ввиду не обработка событий как таковых, а то, что будет обрабатываться: только часть данных которые пользователь видит в текущий момент или необходимо перестраивать сам запрос у ретрива и выборки данных снова. Функции DW (Find, Sort, Filter) обрабатывают то, что имеют на клиенте, т.е., только те данные, которые получены с сервера в настоящий момент. Но следует иметь ввиду вот какую особенность - как только DW отсортирует записи, флаг RetrieveAsNeeded игнорируется - при попытке скроллирования на клиент будет закачиваться весь результат запроса. Для организации интерфейса фильтрации данных правильнее пользоваться QueryMode - это наиболее переносимый вариант и наиболее гемморойный, если нужны красивости :-). Если точно известно, что будет использоваться только один сервер БД, IMHO, лучше строить механизм самостоятельного изменения where-clause в исходном запросе, по возможности открывать пустой список и окно условий фильтрации, а потом закачивать все к себе. Кстати, в Application Framework, который поставлялся с PB до появления PFC, был реализован довольно глючный механизм, который предварительно формировал select count(*)..., и, в случае, если предполагалось получить больше определенного количества записей, предупреждал об этом (ругался, мол, ты собираешься 35 000 записей считать, оно тебе нужно? :-)... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 14:46 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
Да, наименования столбцов и таблиц берутся из pbcatcol и pbcattbl , соответственно. Так вот, создается DataWindow. В нем, естественно, есть селект, который делает основную выборку из базы. Далее делают таблицу, допустим, table_joins CREATE TABLE table_joins ( [join_id] [int] IDENTITY (1, 1) NOT NULL , [table_1] [char] (30) COLLATE Cyrillic_General_BIN NOT NULL , [table_2] [char] (30) COLLATE Cyrillic_General_BIN NOT NULL , [field_1] [char] (30) COLLATE Cyrillic_General_BIN NOT NULL , [field_2] [char] (30) COLLATE Cyrillic_General_BIN NOT NULL , [JoinType] [char] (30) COLLATE Cyrillic_General_BIN NULL ) В table_1 наименование первой таблицы, table_2 - той которая джойнится, field_1 и field_2 - поля по которым идет вязка таблиц, JoinType для служебных слов, допустим, для join или left join . Вид окна, которое появляется перед ретривом, примерно такое: DDDW - таблица (имя русское берется из pbcattbl ) DDDW - столбец (имя берется из pbcatcol ) ОПЕРАТОР (для = , <> и т.д.) ЗНАЧЕНИЕ (для фильтра исползуется) ДЛЯ ОПЕРАТОРОВ И и ИЛИ Если имя таблицы - имя основной таблицы из DW, то это получается как фильтр на основную таблицу, если имя другой таблицы - то будет джоинт. Пользователь может добавлять строчки в такое "окно" (оно по суте DW) и строить довольно сложные селекты. Далее, на основе выбора пользователя берется подлинный select из DW и к нему добавляется нужный кусок кода. Ясно, что таким способом можно джойнить и таблицы и вьюхи. И нужно то всего добавить строчку в table_joins . Я может быть не очень внятно все изложил, но работает это КЛАСНО. Когда я это впервые увидел, то был просто в восторге! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 15:22 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
Black SavageДалее, на основе выбора пользователя берется подлинный select из DW и к нему добавляется нужный кусок кода. Т.е. изменяется условие отбора записей, а поля в запросе не меняются? P.S. Получается, что-то очень похожее на w_FilterSimple, только фильтрация на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 18:16 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
авторТ.е. изменяется условие отбора записей, а поля в запросе не меняются? Да, это утверждение верно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 18:39 |
|
Проблема Retieve
|
|||
---|---|---|---|
#18+
to ZiZu: Для документов я фильтрую данные по дате. Пользователи все равно работают с каким-то периодом. (Для списков со сложным соединением, использую stored procedure). Для справочников тяну все данные , тем более они относительно не большие. что касается свойства Retrieve -> Rows as Needed никогда ее не использую и вам не рекомендую, проблем от нее больше чем пользы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 02:29 |
|
|
start [/forum/topic.php?fid=15&fpage=111&tid=1339368]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 155ms |
0 / 0 |