Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не могу установить алфавитный порядок / 22 сообщений из 22, страница 1 из 1
15.09.2005, 12:31:25
    #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
15.09.2005, 13:02:40
    #33271056
Burn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
>Как поступить?
Добавит еще один индекс по наименованию
...
Рейтинг: 0 / 0
15.09.2005, 13:07:50
    #33271072
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Можно проиндексировать - если надо - по нужному полю связанной таблицы.
Кстати, маленькое замечание - в индексах, используя STR() - лучше указывать, сколько знаков, тогда индекс получается короче и работает быстрее, например STR(nIdPunkt,5), иначе считается, что используется 12 знаков (вроде столько, точно не помню).
...
Рейтинг: 0 / 0
15.09.2005, 13:30:44
    #33271143
Лисонька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
CrispyМожно проиндексировать - если надо - по нужному полю связанной таблицы.
Т.е. индекс дожен выглядеть так: RTRIM(Punkt.cPunkt)+RTRIM(cFam)+' '+RTRIM(cFName)+' '+RTRIM(cSName) (требуется в гриде) ?!
Если нет, то пусть умные господа фоксисты опять изголяются по поводу моего умственного развития и моей профнепригодности, мне уже все равно. Я просто не понимаю, что вы имеете под "проиндексировать по нужному полю связанной таблицы". Извините.
CrispyКстати, маленькое замечание - в STR()...
Про STR() я знаю. Выражение, число символов до 10, десятичные знаки. В топике написала просто кратко.
...
Рейтинг: 0 / 0
15.09.2005, 13:33:57
    #33271154
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Вот RTRIM() в ордере это лишнее.
...
Рейтинг: 0 / 0
15.09.2005, 13:42:06
    #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
15.09.2005, 14:32:35
    #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
15.09.2005, 14:37:22
    #33271357
Komissar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Лисонька...умные господа фоксисты опять изголяются по поводу моего умственного развития и моей профнепригодности...
Забыла поставить кавычки? :)
...
Рейтинг: 0 / 0
15.09.2005, 14:38:59
    #33271365
Лисонька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Владимир СА И вообще перейти от прямых таблиц к Local View или запросам. И использовать SELECTы типа
ВладимирМ проще сделать Local View или прямую выборку через Select-SQL
Благодарю.
Да, значит все-таки запрос. Я думала про это, но не стала развивать эту тему, т.к. посчитала делать выборку не рациональным. У меня форма с гридом, под ним Optiongroup. Пользователь выбирает нужную Optionи и в гриде меняется ордер. Я посчитала, что, если записей будет под 100 тыс., выборка займет немалое время.
А почему RTRIM в индексе нельзя использовать - это фатально?
...
Рейтинг: 0 / 0
15.09.2005, 14:41:33
    #33271377
Лисонька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Komissar Лисонька...умные господа фоксисты опять изголяются по поводу моего умственного развития и моей профнепригодности...
Забыла поставить кавычки? :)
Скорее правильнее было бы написать "высокого о себе мнения господа фоксисты"
...
Рейтинг: 0 / 0
15.09.2005, 15:09:05
    #33271474
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Лисонька... У меня форма с гридом, под ним Optiongroup. Пользователь выбирает нужную Optionи и в гриде меняется ордер...
Я понимаю, что Optiongroup сделано для отображения порядка сортировки. Если это так, то лучше использовать в Header-ах колонок Grid-а свойство Picture и отображать соответствующие картинки, типа как на на приложенном файле.
...
Рейтинг: 0 / 0
15.09.2005, 15:36:44
    #33271576
Komissar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Лисонька..."высокого о себе мнения господа фоксисты"
Те, которые "они" - на самом деле вовсе не фоксисты! Прост студенты-переучки с тяжелым детством!
Настоящие фоксисты - удивительно доброжелательные и потрясающе скромные в самооценке люди!

Владимир СА правильно предлагает тебе насчет Local View и Header'ов...
1. Нет на свете пользователя, которому было бы под силу пролистать в гриде 100 тыс. записей и осмыслить увиденное!
2. Удобнее - больше свободного места!
...
Рейтинг: 0 / 0
15.09.2005, 15:56:46
    #33271644
Лисонька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Владимир САлучше использовать в Header-ах колонок Grid-а свойство Picture и отображать соответствующие картинки, типа как на на приложенном файле.
Уложу детей - попробую. А вот на счет приложенного файла - это сам пикчер или все-таки отдельный файл, потому что "приложенного" для скачивания как раз не наблюдаю?
...
Рейтинг: 0 / 0
15.09.2005, 16:16:51
    #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
15.09.2005, 16:19:43
    #33271708
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Кстати, с TRIM-ами еще и похуже случаи бывают
...
Рейтинг: 0 / 0
18.09.2005, 15:03:22
    #33275373
Лисонька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Показала форму моей мадам шефу в двух вариантах: с Optiongroupe и с кликом на Headere. Ей все же понравилось первое, а я думаю, что второй вариант лучше, нагляднее (после клика весь отсортированный Column выделяется другим цветом).
Теперь такой вопрос: что рациональнее - каждый раз делать новый запрос с нужной сортировкой SELECT ... FROM ... ORDER BY... или сделать запрос один раз, расставить индексы (INDEX ON ... TAG tag1 OF idxX, INDEX ON ... TAG tag2 OF idxX ADDITIVE), а потом выбирать нужный?
Благодарю
...
Рейтинг: 0 / 0
18.09.2005, 15:25:50
    #33275392
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
Лисонька...Теперь такой вопрос: что рациональнее - каждый раз делать новый запрос с нужной сортировкой SELECT ... FROM ... ORDER BY... или сделать запрос один раз, расставить индексы (INDEX ON ... TAG tag1 OF idxX, INDEX ON ... TAG tag2 OF idxX ADDITIVE), а потом выбирать нужный?...
Первый вариант ответа неплох при многопользовательской среде. Но я лично пока использую второй вариант. Но всегда имеет место кнопка на форме переопределить данные (в многопользовательской среде). Но это лично мой выбор.
...
Рейтинг: 0 / 0
18.09.2005, 20:08:37
    #33275541
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу установить алфавитный порядок
ЛисонькаТеперь такой вопрос: что рациональнее - каждый раз делать новый запрос с нужной сортировкой SELECT ... FROM ... ORDER BY... или сделать запрос один раз, расставить индексы (INDEX ON ... TAG tag1 OF idxX, INDEX ON ... TAG tag2 OF idxX ADDITIVE), а потом выбирать нужный?
Благодарю
Зависит от конкретной ситуации. Определяющим здесь является скорость. Что будет выполняться быстрее: Новая выборка с новым ORDER BY или создание индекса?

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

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

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


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