powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблема Retieve
12 сообщений из 12, страница 1 из 1
Проблема Retieve
    #32355010
Фотография ZiZu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня проект постоен по достаточно страндартной идеологии список/редактор. Список - это Grid Datawindow, и когда выбирается один
из его элементов (строка) вызывается FreeForm редактор. Проблема
состоит в том, что запрос Retrieve у списка может тащить очень много
данных. Запрос типа:
select c.blabla, ad.blabla ... from customer as c join adress as ad join ...,
танет все на клиента, даже то, что юзер никогда не будет смотреть.
Можно ли как-то управлять процессом retrieve, например вычитавать данные по порциям во время скролинга.
Как Вы решаете подобные проблемы?
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355067
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
авторнапример вычитавать данные по порциям во время скролинга Свойство Retrieve -> Rows as Needed
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355102
Фотография ZiZu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, а как тогда обстоят дела с поиском данных внутри dw, бегунок некрасиво отображается и можно ли сделать сортировку кликом на столбце?
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355210
Фотография !!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, конечно, см. собітия DW - clicked или в єтом роде и обрабатівай
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355263
Фотография ZiZu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да имеется ввиду не обработка событий как таковых, а то, что будет обрабатываться: только часть данных которые пользователь видит в текущий момент или необходимо перестраивать сам запрос у ретрива и выборки данных снова.
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355313
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моей нынешной конторе столкнулся довольно с интересной идеей, касающейся сей проблемы. Так вот, узер нажимает на кнопку "Получить данные", появляется окно в котором можно выбрать таблицы, которые нужно приджойнить к селекту, на котором посторен DW. К примеру, есть таблица счетов клиентов (ОЧЕНЬ большая), она выбирается целиком в DW. До ретрива вылезает окно в котором юзер выбирает таблицу депозитов клиентов, может выбрать столбцы из этой таблице по которым желает установить фильтр. В результате в DW оказывается не вся таблица счетов, а только те которые относятся к депозитам. Причем система построена так, что добавить таблицу для джоинта не составляет никакого труда. Естественно юзерозверь видит названия таблиц и столбцов по-русски. Система достаточно простая и эфективная. Если интересно, могу рассказать подробнее.
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355323
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Black SavageЕсли интересно, могу рассказать подробнее.
Расскажи. Используются таблицы "pbcat*" ?
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355410
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiZu
Да имеется ввиду не обработка событий как таковых, а то, что будет обрабатываться: только часть данных которые пользователь видит в текущий момент или необходимо перестраивать сам запрос у ретрива и выборки данных снова.

Функции DW (Find, Sort, Filter) обрабатывают то, что имеют на клиенте, т.е., только те данные, которые получены с сервера в настоящий момент. Но следует иметь ввиду вот какую особенность - как только DW отсортирует записи, флаг RetrieveAsNeeded игнорируется - при попытке скроллирования на клиент будет закачиваться весь результат запроса.

Для организации интерфейса фильтрации данных правильнее пользоваться QueryMode - это наиболее переносимый вариант и наиболее гемморойный, если нужны красивости :-). Если точно известно, что будет использоваться только один сервер БД, IMHO, лучше строить механизм самостоятельного изменения where-clause в исходном запросе, по возможности открывать пустой список и окно условий фильтрации, а потом закачивать все к себе.

Кстати, в Application Framework, который поставлялся с PB до появления PFC, был реализован довольно глючный механизм, который предварительно формировал select count(*)..., и, в случае, если предполагалось получить больше определенного количества записей, предупреждал об этом (ругался, мол, ты собираешься 35 000 записей считать, оно тебе нужно? :-)...
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355523
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, наименования столбцов и таблиц берутся из 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 . Я может быть не очень внятно все изложил, но работает это КЛАСНО. Когда я это впервые увидел, то был просто в восторге!
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355908
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Black SavageДалее, на основе выбора пользователя берется подлинный select из DW и к нему добавляется нужный кусок кода.
Т.е. изменяется условие отбора записей, а поля в запросе не меняются?
P.S. Получается, что-то очень похожее на w_FilterSimple, только фильтрация на сервере.
...
Рейтинг: 0 / 0
Проблема Retieve
    #32355946
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТ.е. изменяется условие отбора записей, а поля в запросе не меняются?

Да, это утверждение верно
...
Рейтинг: 0 / 0
Проблема Retieve
    #32356152
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to ZiZu:
Для документов я фильтрую данные по дате. Пользователи все равно работают с каким-то периодом. (Для списков со сложным соединением, использую stored procedure).
Для справочников тяну все данные , тем более они относительно не большие.

что касается свойства Retrieve -> Rows as Needed
никогда ее не использую и вам не рекомендую, проблем от нее больше чем пользы.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблема Retieve
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]