powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid и set filter
19 сообщений из 44, страница 2 из 2
Grid и set filter
    #32788777
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovТы в упор не прислушиваешься к вопросу ЗАЧЕМ пользователю 150000 записей!Сделай ему удобную форму задания параметров, продумай ЧТО он обычно ищет и КАК - сократи объём выборки до 100 ну максимум до 1000 записей (ессно используя параметризованный View). Потом добавь индексы по полям, входящим в условия отбора (отбираем по дате - делай индекс по дате, отбираем по какому-то коду, возможно связанному с другой таблицей - делай индекс по коду). И будет тебе счастье, будет заполнятся курсор за < 1 секунду! И все будут просто счастливы!
А Grid+Filter и Grid+Relation медленная и мучительная смерть :(
Вообще-то, пользователь хочет видеть все 650тыс записей, и по ним делать выборки , которые можно редактировать, но поскольку такие проблемы с гридом и фильтром, была идея поделить информацию по годам , что ли . Отсюда и 150тыс записей. Но это была плохая идея.
Пока пробую выборки делать во View, и менять датасурс грида с самой таблицы на local view.
Идеально было бы воспользоваться советом acrisuin'a , насчет set key . Индекс для выборки создать можно, а вот как использовать Set key range для выборки с разными типами полей непонятно. Точнее в текстовом виде некорректно как-то обрабатываются поля с датами.
Или , если index по полям dtoc(data1) + region , то
set key range '01.04.2004'+'Советский', '01.05.2004'+'Советский'
выбирает информацию за 01.04.2004,01.05.2001, 01.05.2002,01.05.2003,01.05.2004 и не обращает никакого внимания на значение поля region. Или я что-то неправильно делаю??
...
Рейтинг: 0 / 0
Grid и set filter
    #32788883
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не лучше в схеме Информация->Параметры отбора->Выборка->Корректировка->Сохранение, поменять местами 1 и 2 этап?
В DE формы помещается VIEW со свойством NoDataOnLoad=.T., а на форме контролы, с помощью которых формируются параметры отбора, после ввода параметров клик по кнопке "Отобрат/Обновить", REQUERY для VIEW и далее по схеме.
...
Рейтинг: 0 / 0
Grid и set filter
    #32788987
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AleksMed
Нельзя, потому что это будет уже совсем другая форма :)
Собственно, задача стоит продержаться до появления новой программы.
Поэтому,радикально переделывать процесс, и переучивать пользователей не хочется.
Сейчас нужно : показать пользователю все записи что у него есть.
А пользователь затем либо просматривает\редактирует(с возможностью отката изменений), либо делает выборку, просматривает ее и потом редактирует ее (раньше использовался фильтр), либо делает выборку для отчета(просто курсор).
А сразу заставлять выбирать условие нам не подходит. Может пользователь просто полистать информацию за год-два хочет, а представление с нашей информации только открываться пару минут будет.
...
Рейтинг: 0 / 0
Grid и set filter
    #32789107
Трехсотый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bege
А сразу заставлять выбирать условие нам не подходит. Может пользователь просто полистать информацию за год-два хочет, а представление с нашей информации только открываться пару минут будет.

А если это будет начальный период дат например с .... по .... за 9мес., и открываться грид будет очень быстро.

А если поковыряться , то можно присобачить на меню по правой кнопке мыши готовые периоды дат (например по 9мес), и будет для пользователя илюзия просмотра всей базы периода.

И переучивать никого не надо :)
...
Рейтинг: 0 / 0
Grid и set filter
    #32789306
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Трехсотый
Дело не в периоде. Просто открыть форму , посмотреть и поредактировать - нет проблем, ни со временем открытия, ни с чем либо другим. 4 года так работают, и вполне довольны :) Проблема в гриде. При больших объемах данных он не в состоянии показать нормально отфильтрованные данные(выборка делается по значениям от 1го до 6 полей таблицы, одно из которых - дата).Вот и приходится выкручиваться :)
Может кто подскажет, как все-таки пользоваться set key range , если индекс по нескольким полям. Лучше с примером.
...
Рейтинг: 0 / 0
Grid и set filter
    #32789367
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, для начала, если ты хочешь упорядочивать выборку по составному ключу с датой, то дату надо преобразовать к виду "ГГГГММДД". Специально для этого есть такая функция

DTOS()

На конце латинская "S". Не надо путать ее с функцией DTOC(). Это не одно и то же.

И потом, рассмотри такой вариант как во вложении. Т.е. пользователю изначально открывается пустая формочка (пустой список). Он задает критерии и отображает нужный список.
...
Рейтинг: 0 / 0
Grid и set filter
    #32789578
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ
Спасибо за подсказку dtos() :)
Но как все-таки написать set key to range правильно, если индекс по dtos(time)+left(region).
Устанавливать
set key to range '20040101'+'Советский','20040131'+'Cоветский'
по дате нормально, а на район - ноль внимания.
Как правильно?
...
Рейтинг: 0 / 0
Grid и set filter
    #32789999
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае правильно перестроить индекс сначала по району, а потом по дате.
...
Рейтинг: 0 / 0
Grid и set filter
    #32790002
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только учесть, что имена районов состоят из разного числа буковок, в общем случае ;-)
...
Рейтинг: 0 / 0
Grid и set filter
    #32790546
Трехсотый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bege2Трехсотый
Дело не в периоде. Просто открыть форму , посмотреть и поредактировать - нет проблем, ни со временем открытия, ни с чем либо другим. 4 года так работают, и вполне довольны :) Проблема в гриде. При больших объемах данных он не в состоянии показать нормально отфильтрованные данные(выборка делается по значениям от 1го до 6 полей таблицы, одно из которых - дата).Вот и приходится выкручиваться :)


Хочется разобраться, видимо я не понял проблему.
Грид на форме?

При открытии формы сделайте 2 курсора,
1- все 650тыс.,
2- только часть (например за какой то период) для отображения в гриде.

Все запросы и выборки делаете по 1 курсору., а результат (если он очень большой) разбиваете на части, и показываете в гриде только первую часть, при этом дав пользователю возможность переключаться между частями результирующего курсора?( например как в html <- 1,2,3-> все)

Грид при небольших частях данных будет открываться моментально и отображать как надо.

Или я опять не правильно понял проблему и все дело в сортировках внутри грида???
...
Рейтинг: 0 / 0
Grid и set filter
    #32790578
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажу честно - не всё внимательно прочёл, но...
150000 записей (как минимум) действительно нужно пользователю? Что он с ними делает? Просматривает scroll'om?

Помните "Хищника"? - "там кто-то есть... и это не человек..."

Мой опыт: SET FILTER - может быть довольно неприятная вещь, но он оптимизируем! Я этим часто пользуюсь на довольно больших базах - 800000 записей, 20-30 полей - помогает... Особенно, если лень одолевает... :-)
...
Рейтинг: 0 / 0
Grid и set filter
    #32790704
akrisiun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bege2ВладимирМ
Спасибо за подсказку dtos() :)
Но как все-таки написать set key to range правильно, если индекс по dtos(time)+left(region).
Устанавливать
set key to range '20040101'+'Советский','20040131'+'Cоветский'
по дате нормально, а на район - ноль внимания.
Как правильно?

Must be Index tag :
Код: plaintext
1.
2.
3.
4.
5.
select orders
index on left(region, 9 )+ dtos(time) tag regtime

SET KEY TO RANGE 'Советский'+'20040101', 'Cоветский'  + '20040131'

Privet from Lithuania, sorry for english, but I don't have keyboard with
cyrilica letters.

Andrius
...
Рейтинг: 0 / 0
Grid и set filter
    #32790925
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трехсотый
Грид при небольших частях данных будет открываться моментально и отображать как надо.
Или я опять не правильно понял проблему и все дело в сортировках внутри грида???
2Трехсотый:
Проблема в том что надо выборку редактировать. С фильтрами все виснет, а представления открываются долго, а отдельно потом изменения закачивать в основную таблицу муторно.
...
Рейтинг: 0 / 0
Grid и set filter
    #32791730
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Bege
авторНо у меня - 24 поля(от 7 до 60 симв) и 600тыс записей (каждый день прибавляется 500-600 записей

Стоит обратить внимание на нормализацию. Наличие в оперативной таблице текстового поля района наводит на нехорошие размышления - нужно вынести в отдельную таблицу. И по другим полям тоже пройтись.

авторВ данном случае правильно перестроить индекс сначала по району, а потом по дате

Вот это скорее всего неправильно. Индекс по дате - самый эффективный (после первичного ключа), если эта дата соответствует временному порядку добавления записей и (как правило) не меняется. Соответственно, велика вероятность того, что большое количество записей с одинаковой датой будут физически находиться в одном/смежных кластерах диска (зависит от дефрагментации конечно). Эффективность работы дисковой подсистемы с учетом кэша возрастает многократно, особенно на больших таблицах. Т.е. совет использовать индекс по dtos() и set key to range очень правильный.
...
Рейтинг: 0 / 0
Grid и set filter
    #32791765
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bege
Проблема в том что надо выборку редактировать. С фильтрами все виснет, а представления открываются долго, а отдельно потом изменения закачивать в основную таблицу муторно.
Мне кажется, Вы чего-то не понимаете:

-) Либо пользователь ждет один раз пока откроется Local View, либо он наблюдает постоянные тормоза при перемещении по записям.

Угадайте с одного раза, что пользователь предпочтет? Правильно, послать такую программу куда подальше. Тормозов быть вообще не должно

-) Local View можно сделать обновляемым. Т.е. изменения внесенные во View автоматически попадут в исходную таблицу. Ничего специально закачивать в основную таблицу не надо.

-) Уже неоднократно Вам говорили про то, что необходима оптимизация. Грубо говоря - это создание нескольких индексов по условиям отбора. Индексы ускорят как собственно выборку (открытие Local View), так и работу с фильтром.

-) В конце концов, никто не мешает наложить фильтр на собственно Local View. Например, в Local View делается выбор только по дате, а все остальные фильтры накладываются уже на сам Local View (на результат выборки)
...
Рейтинг: 0 / 0
Grid и set filter
    #32791860
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi XAndy
XAndyВот это скорее всего неправильно. Индекс по дате - самый эффективный (после первичного ключа), если эта дата соответствует временному порядку добавления записей и (как правило) не меняется. Соответственно, велика вероятность того, что большое количество записей с одинаковой датой будут физически находиться в одном/смежных кластерах диска (зависит от дефрагментации конечно). Эффективность работы дисковой подсистемы с учетом кэша возрастает многократно, особенно на больших таблицах. Т.е. совет использовать индекс по dtos() и set key to range очень правильный
В отрыве от контекста эти соображения верные. Но если вспомним, что хотел Bege ...
BegeНо как все-таки написать set key to range правильно, если индекс по dtos(time)+left(region).
Устанавливать
set key to range '20040101'+'Советский','20040131'+'Cоветский'
по дате нормально, а на район - ноль внимания.
Как правильно?
... То получим совсем не то, что хочется.
Bege хочет по одному району за период. А получается - за период, но районы игнорируются (нельзя сказать, конечно, что совсем игнорируются, но поведение странное). И почему же, интересно? ;-)
А если вспомним про сортировку строк? ;-)))
Что, запись '20040101'+'Турецкий' не попадет в set key to range '20040101'+'Советский','20040131'+'Cоветский' ??? ;-)))))))))
...
Рейтинг: 0 / 0
Grid и set filter
    #32792004
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urri... То получим совсем не то, что хочется.
Bege хочет по одному району за период. А получается - за период, но районы игнорируются (нельзя сказать, конечно, что совсем игнорируются, но поведение странное). И почему же, интересно? ;-)
А если вспомним про сортировку строк? ;-)))
Что, запись '20040101'+'Турецкий' не попадет в set key to range '20040101'+'Советский','20040131'+'Cоветский' ??? ;-)))))))))
2Urri : Вы правы, при такой сортировке все районы попадают в выборку.
Конечно же правильнее (спасибо acrisiun!), наоборот, region+dtos(time) .
Но полей для выборки шесть, и получается что надо либо создавать индекс каждый раз по выбранным полям (условиям выборки), что невозможно, потому что таблица буферизованная , да и по времени создание индекса не устраивает. Или насоздавать индексов заранее , сколько там получится комбинация из 6ти ? :) Тоже вопрос.
2 XAndy: Нормализация нужна, не спорю, даже по 4 полям можно. Не знаю о чем думали разработчики этой программы, возможно были и у них какие-то резоны. Сейчас просто нет смысла глобально переделывать это приложение, в ближайшее время начнем разработку замены. А пока поддерживаю в рабочем состоянии эту программу.
ВладимирММне кажется, Вы чего-то не понимаете:
-) Либо пользователь ждет один раз пока откроется Local View, либо он наблюдает постоянные тормоза при перемещении по записям.

2ВладимирМ : Пользователь заходя в форму для редактирования данных может делать сколько угодно выборок. Им так удобно : выбрал какие-то записи - отредактировал, чтоб другие записи даже и не видно было.
Индексы есть, и насчет ускорить выборку индексированием я уже написала выше. Видимо, я немного туманно обрисовала проблему сначала, но сейчас-то уже все честно рассказала. Могу эту формочку вывесить, если кому интересно .
...
Рейтинг: 0 / 0
Grid и set filter
    #32792034
Bege
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл с формой
...
Рейтинг: 0 / 0
Grid и set filter
    #32792208
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше всего, конечно, SELECT.
Но чтоб не сильно переделать, предлагаю индексы только по одному полю - всего 6 тегов по всем 6 полям сортировки.
Далее SET ORDER TO и далее SET KEY TO по самому отсеивающему записи полю. Ну а оставшиеся условия - далее поставить SET FILTER TO BETWEEN(...) AND BETWEEN(...) AND ...
Ну так, примерно. ;-)

Фильтр будет оптимизироваться и, на фоне SET KEY TO тормозить не должон.

Впрочем, может, условия фильтра будет пытвться оптимизироваться независимо от SET KEY TO. Тогда, несмотря на SET KEY TO, тормоза останутся. Что ж. Тогда убить все оставшиеся 5 тегов кроме того, по которому имеем SET ORDER TO и SET KEY TO. Или не убивать эти теги, но написать в SET FILTER TO BETWEEN(...) AND BETWEEN(...) AND ... NOOPTIMIZE.

Предлагаю инициатору темы самому проверить, что в его условиях будет меньше тормозить. Возможно, вариант фильтра без оптимизации окажется гораздо быстрее. ;-)
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid и set filter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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