powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не могу установить алфавитный порядок
22 сообщений из 22, страница 1 из 1
Не могу установить алфавитный порядок
    #33270940
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леди и джентельмены!
Помогите, пожалуйста, разобраться. Пример:
Таблица Person: nIdPers, cFam, cFName, cSName, nBorn, nIdPunkt. Один из тэгов, требующихся для просмотра этой таблицы гриде: STR(nIdPunkt)+RTRIM(cFam)+' '+RTRIM(cFName)+' '+RTRIM(cSName) (требуется в гриде)
Таблица Punkt: nIdPunkt,cPunkt,cTypePunkt.
Связь: SET RELATION TO Person.nIdPunkt INTO Punkt
В гриде с ордером, указанном выше, прописала в один из столбцов источником cPunkt.
Теперь получается такая картина в гриде: "ЯКОВКА Д" с nIdPunkt=25 стоит раньше, чем "ДМИТРИЕВКА С" с nIdPunkt=97 (все правильно: 97>25). А нужном бы, чтобы все же в алфавитном порядке населенные пункты были.
Как поступить?
Благодарю
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271056
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Как поступить?
Добавит еще один индекс по наименованию
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271072
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно проиндексировать - если надо - по нужному полю связанной таблицы.
Кстати, маленькое замечание - в индексах, используя STR() - лучше указывать, сколько знаков, тогда индекс получается короче и работает быстрее, например STR(nIdPunkt,5), иначе считается, что используется 12 знаков (вроде столько, точно не помню).
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271143
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrispyМожно проиндексировать - если надо - по нужному полю связанной таблицы.
Т.е. индекс дожен выглядеть так: RTRIM(Punkt.cPunkt)+RTRIM(cFam)+' '+RTRIM(cFName)+' '+RTRIM(cSName) (требуется в гриде) ?!
Если нет, то пусть умные господа фоксисты опять изголяются по поводу моего умственного развития и моей профнепригодности, мне уже все равно. Я просто не понимаю, что вы имеете под "проиндексировать по нужному полю связанной таблицы". Извините.
CrispyКстати, маленькое замечание - в STR()...
Про STR() я знаю. Выражение, число символов до 10, десятичные знаки. В топике написала просто кратко.
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271154
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот RTRIM() в ордере это лишнее.
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271177
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька...Как поступить?...
1. RTRIM() я бы неиспользавал в индексе.
2. Как указал Crispy STR() использовать с конкретным количеством знаков.
3. И вообще перейти от прямых таблиц к Local View или запросам. И использовать SELECTы типа:
Код: plaintext
1.
2.
3.
SELECT Punkt.cPunkt, Person.cFam, Person.cFName, Person.cSName ;
  FROM Person INNER JOIN Punkt ;
    ON Person.nIdPunkt = Punkt.nIdPunkt ;
    ORDER BY Punkt.cPunkt, Person.cFam, Person.cFName, Person.cSName ...
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271339
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С самого начала:

В Grid отображаются поля из 2 связанных таблиц: Person и Punkt
Person - главная, Punkt - подчиненная

Необходимо, чтобы в пределах одного и того же значения кода главной таблицы (Person.nIdPunkt) записи подчиненной таблицы отображались в определенном порядке.

В твоей постановке задачи несколько ошибок

1. Если главный индекс подчиненной таблицы начинаяется с STR(nIdPunkt)+..., то связь надо организовывать также по символьной строке, но ни в коем случае не по числовому значению. Т.е. должно быть

Код: plaintext
SET RELATION TO STR(Person.nIdPunkt) INTO Punkt

2. Если связь имеет вид один-ко-многим, и обе таблицы одновременно отображаются в одном GRID, то необходима дополнительная команда

SET SKIP TO Punkt

для обеспечения этой связи.

3. Если тебе необходимо упорядочить записи подчиненной таблицы вне зависимости от значения кода главной, то необходимо изменить саму связь. Т.е. поменять местами главную и подчиненную таблицу. В противном случае ничего не получится. Действия примерно такие:

Код: plaintext
1.
2.
3.
4.
5.
select Person 
SET ORDER TO nIdPunkt
select Punkt
INDEX ON RTRIM(cFam)+' '+RTRIM(cFName)+' '+RTRIM(cSName) TAG SortOrd
SET RELATION TO nIdPunkt INTO Person

Хотя, как указал Владимир СА , проще сделать Local View или прямую выборку через Select-SQL
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271357
Komissar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька...умные господа фоксисты опять изголяются по поводу моего умственного развития и моей профнепригодности...
Забыла поставить кавычки? :)
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271365
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СА И вообще перейти от прямых таблиц к Local View или запросам. И использовать SELECTы типа
ВладимирМ проще сделать Local View или прямую выборку через Select-SQL
Благодарю.
Да, значит все-таки запрос. Я думала про это, но не стала развивать эту тему, т.к. посчитала делать выборку не рациональным. У меня форма с гридом, под ним Optiongroup. Пользователь выбирает нужную Optionи и в гриде меняется ордер. Я посчитала, что, если записей будет под 100 тыс., выборка займет немалое время.
А почему RTRIM в индексе нельзя использовать - это фатально?
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271377
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Komissar Лисонька...умные господа фоксисты опять изголяются по поводу моего умственного развития и моей профнепригодности...
Забыла поставить кавычки? :)
Скорее правильнее было бы написать "высокого о себе мнения господа фоксисты"
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271474
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька... У меня форма с гридом, под ним Optiongroup. Пользователь выбирает нужную Optionи и в гриде меняется ордер...
Я понимаю, что Optiongroup сделано для отображения порядка сортировки. Если это так, то лучше использовать в Header-ах колонок Grid-а свойство Picture и отображать соответствующие картинки, типа как на на приложенном файле.
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271576
Komissar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька..."высокого о себе мнения господа фоксисты"
Те, которые "они" - на самом деле вовсе не фоксисты! Прост студенты-переучки с тяжелым детством!
Настоящие фоксисты - удивительно доброжелательные и потрясающе скромные в самооценке люди!

Владимир СА правильно предлагает тебе насчет Local View и Header'ов...
1. Нет на свете пользователя, которому было бы под силу пролистать в гриде 100 тыс. записей и осмыслить увиденное!
2. Удобнее - больше свободного места!
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271644
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир САлучше использовать в Header-ах колонок Grid-а свойство Picture и отображать соответствующие картинки, типа как на на приложенном файле.
Уложу детей - попробую. А вот на счет приложенного файла - это сам пикчер или все-таки отдельный файл, потому что "приложенного" для скачивания как раз не наблюдаю?
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271700
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Лисонька :

Код: plaintext
1.
2.
3.
4.
5.
6.
Вообще-то я имел в виду для таблицы Person после
SET RELATION TO STR(Person.nIdPunkt) INTO Punkt 
(как верно уточнил насчет типа связи в пункте  1  ВладимирМ.)
создать такой индекс:
INDEX ON Punkt.cPunkt TO SortPunkt COMPACT
в составной индекс его из-за этой связи включать не имеет смысла.
Тогда главная таблица и сортируется по полю связанной. В принципе так все работает, хотя иногда, конечно, выборки делать проще. А всяческие TRIM-функции в индексах лучше вообще не использовать по той причине, что будет неразбериха в сортировке, например:
Иванов Иосиф Абрамович :) из-за этого будет стоять ниже, чем
Иванова Марья Ивановна .

(не совсем кстати понял, что за кавычки в выражении индекса? там видимо между ними должны стоять пробелы? - чтобы сортировка вышла правильной)

Успехов!
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33271708
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, с TRIM-ами еще и похуже случаи бывают
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33275373
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показала форму моей мадам шефу в двух вариантах: с Optiongroupe и с кликом на Headere. Ей все же понравилось первое, а я думаю, что второй вариант лучше, нагляднее (после клика весь отсортированный Column выделяется другим цветом).
Теперь такой вопрос: что рациональнее - каждый раз делать новый запрос с нужной сортировкой SELECT ... FROM ... ORDER BY... или сделать запрос один раз, расставить индексы (INDEX ON ... TAG tag1 OF idxX, INDEX ON ... TAG tag2 OF idxX ADDITIVE), а потом выбирать нужный?
Благодарю
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33275392
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лисонька...Теперь такой вопрос: что рациональнее - каждый раз делать новый запрос с нужной сортировкой SELECT ... FROM ... ORDER BY... или сделать запрос один раз, расставить индексы (INDEX ON ... TAG tag1 OF idxX, INDEX ON ... TAG tag2 OF idxX ADDITIVE), а потом выбирать нужный?...
Первый вариант ответа неплох при многопользовательской среде. Но я лично пока использую второй вариант. Но всегда имеет место кнопка на форме переопределить данные (в многопользовательской среде). Но это лично мой выбор.
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33275541
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаТеперь такой вопрос: что рациональнее - каждый раз делать новый запрос с нужной сортировкой SELECT ... FROM ... ORDER BY... или сделать запрос один раз, расставить индексы (INDEX ON ... TAG tag1 OF idxX, INDEX ON ... TAG tag2 OF idxX ADDITIVE), а потом выбирать нужный?
Благодарю
Зависит от конкретной ситуации. Определяющим здесь является скорость. Что будет выполняться быстрее: Новая выборка с новым ORDER BY или создание индекса?

Правда, это только в том случае, если данные этой выборки не предполагается редактировать. Только просмотр. Если еще нужно редактирование, тогда лучше сразу построить ВСЕ индексы.
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33275572
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМПравда, это только в том случае, если данные этой выборки не предполагается редактировать. Только просмотр. Если еще нужно редактирование, тогда лучше сразу построить ВСЕ индексы.
Нет, выборка в гриде служит в данной форме только для просмотра. А что, разве выполнение команды SET ORDER TO ... для готовых индексов занимает так же много времени в большой таблице, как и SELECT ... ORDER BY?
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33275725
Komissar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаНет, выборка в гриде служит в данной форме только для просмотра.
Извините за настойчивость - неужели стоИт задача просмотра 100 тыс. записей?

ЛисонькаА что, разве выполнение команды SET ORDER TO ... для готовых индексов занимает так же много времени в большой таблице, как и SELECT ... ORDER BY?
Конечно нет! С чего ВЫ взяли? Почему такой вопрос?
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33277204
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛисонькаА что, разве выполнение команды SET ORDER TO ... для готовых индексов занимает так же много времени в большой таблице, как и SELECT ... ORDER BY?
Нет, конечно. Сравнение идет между Select-SQL и INDEX ON. Сам процесс индксирования относительно медленный. А переключение между уже созданными индексами происходит практически мгновенно.

Но сам факт создания и сопровождения временных индексов требует некоторой дополнительной работы и осторожности. Динамический Select-SQL с изменяемым ORDER BY в этом смысле гораздо проще в реализации.
...
Рейтинг: 0 / 0
Не могу установить алфавитный порядок
    #33277646
Лисонька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KomissarКонечно нет! С чего ВЫ взяли? Почему такой вопрос?
Это я ответила ВладимируМ. А 100 тыс. записей через грид - ну, преувеличила, но тысяч 50 точно. А с простым просмотром через грид не я себя заморочила - моя шеф хочет, чтобы эта программа в точности копировала старую на FPD (давно стертую и забытую всеми) и напоминала еще какую-то, накатанную на Access и служащую для нее эталоном.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не могу установить алфавитный порядок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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