powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сортировка в GRID - один индекс поверх другого?
12 сообщений из 12, страница 1 из 1
Сортировка в GRID - один индекс поверх другого?
    #34785402
FreeLSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть GRID, в котором отображается подчиненная таблица. Фильтр установлен свойством ChildOrder. Необходимо в рамках данного фильтра организовать сортировку по другому полю. Если ставлю фильтр при помощи SET ORDER TO, сбрасывается предыдущий и теряется связь с родительской таблицей - GRID вообще ничего не отображает.
Можно ли сделать фильтрацию без индекса или каким- то способом установить два order'а последовательно?
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34785435
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фильтр ставится при помощи

SET FILTER TO
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34785446
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет о том, чтобы в пределах связанных записей изменить порядок сортировки, то это можно сделать при помощи составного индекса по частичному совпадению ключа.

Вот здесь описано что именно имеется в виду

http://www.foxclub.ru/articles/index.php?id=36#OrdinaryRelationship

Однако это имеет смысл, если порядок сортировки один и тот же. Т.е. можно обойись одним составным индексом.

Если же порядок сортировки заранее не известен, то имеет смысл вместо RELATION делать выборку. Т.е. в Grid отображать не собственно таблицу, а выборку из нее отсортированную нужным образом. Выборку можно сделать любым удобным способом через Select-SQL, Local View или CursorAdapter
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34785499
FreeLSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виноват, SET ORDER TO - не фильтр, конечно, порядок
А как со скоростью при работе по частичному совпадению индекса? Потому что когда я пытался вытащить нужные записи по SET FILTER TO, а потом накатить нужный мне ORDER, застрелиться было можно, пока дождешься обновления формы :( (обе таблицы не маленькие)
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34785749
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фильтр (SET FILTER TO) - это не что-то вычисленное один раз, а некий способ перебора записей. Т.е. при наложении фильтра сразу ничего не происходит, поэтому сама команда проходит мгновенно. Но затем, при попытке перейти на очередную запись, FoxPro проверяет удовлетворяет ли данная запись условию фильтра. Если нет, то запись пропускается и проверяется следующая запись.

Для отображения в Grid надо найти столько записей удовлетворяющих фильтру, сколько строк видно в Grid одномоментно. При первом открытии поиск таких записей начнется с самого начала таблицы.

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

Правда, в VFP9 этот процесс для Grid можно оптимизировать (ускорить) если установить свойство Grid.Optimize = .T. Но это имеет смысл только в том случае, если по тому полю или выражению, по которому выполняется фильтрация есть индекс.

Связка по SET RELATION выполняется очень быстро, поскольку основана на индексе. Здесь торможения заметно не будет. Но такая связка годится только для простых случаев отображения данных.

Если предполагается разнообразная сортировка или дополнительная фильтрация записей подчиненной таблицы, то лучше делать выборку по коду главной таблицы.
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787370
FreeLSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В грид выбирается список телефонов предприятия по коду предприятия. Т.е. как раз случай, когда удовлетворяет условию мало записей, и SET FILTER работает очень медленно. SET RELATION устраивает вполне в плане выборки, но нужно еще внутри этой выборки сортировать по важности, например. Сортировку хотелось бы произвольную, чтобы пользователь сам устанавливал порядок, для этого создал отдельное поле.
Сейчас экспериментирую с составными индексами, дело осложняется тем, что главный идентификатор - число. Попробую что-то вроде str(id)+...
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787495
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeLSDСортировку хотелось бы произвольную, чтобы пользователь сам устанавливал порядок, для этого создал отдельное поле.
ВладимирМЕсли предполагается разнообразная сортировка или дополнительная фильтрация записей подчиненной таблицы, то лучше делать выборку по коду главной таблицы.
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787715
FreeLSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это решение напрашивается, я б так и сделал, если бы писал форму с нуля. А так приходится переделывать, что есть, хочется обойтись "малой кровью", вот и хочу странного :)
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787750
occurs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И можно вот так Set filter to ATC(cSearchExpression, cExpressionSearched [, nOccurrence]) > 0
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787901
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeLSDЭто решение напрашивается, я б так и сделал, если бы писал форму с нуля. А так приходится переделывать, что есть, хочется обойтись "малой кровью", вот и хочу странного :) Форму надо бы порвать на две: встал на нужную организацию, нажал кнопку просмотр, открылась вторая форма, сделалась выборка в курсор и крути его как хочешь. На одной форме два грида лучше по relation иначе при каждом переходе надо новую выборку делать - тормоза при поиске нужной организации.

Как вариант частичного решения проблемы, если данные сильно не меняются отсортировать физически телефоны в нужном (наиболее часто требуемом) порядке. Только эту сортировку периодически обновлять надо. Т.к. при использовании индекса по ParentId в дочерней таблице записи идут в том порядке, в котором они в DBF записаны.

Вариант с кучей индексов типа str(id)+... тоже не самый лучший. В случае спецполя - тормоза будут при его заполнении, т.к. при этом индекс будет перестраиваться. И где гарантия что два пользователя одновременно не захотят одну организацию посмотреть?

Рекомендую подумать о курсорах (VIEW с параметром например) и заполнении второго грида по нажатию кнопки.
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787951
FreeLSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T Форму надо бы порвать на две: встал на нужную организацию, нажал кнопку просмотр, открылась вторая форма,
Так оно и есть, только во второй форме грид берет записи прямо из таблицы, без предварительной выборки.
...
Рейтинг: 0 / 0
Сортировка в GRID - один индекс поверх другого?
    #34787984
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeLSD Dima T Форму надо бы порвать на две: встал на нужную организацию, нажал кнопку просмотр, открылась вторая форма,
Так оно и есть, только во второй форме грид берет записи прямо из таблицы, без предварительной выборки.

Замени таблицу на обновляемое параметризированное Local View или CursorAdapter. Модификация минимальная (можно добавить прямо в DataEnvironment), но "руки уже развязаны" в смысле дополнительной сортировки и фильтрации.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сортировка в GRID - один индекс поверх другого?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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