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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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