powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сортировка в гриде при имеющихся комбах
17 сообщений из 17, страница 1 из 1
Сортировка в гриде при имеющихся комбах
    #35825109
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем таблицу tab1
f1f2f3163256321444

Имеем таблицу tab2
f1f21"Вася"2"Жора"3"Яна"4"Маша"5"Катя"6"Леша"

Имею грид (на основании таблицы tab1 которая в enveronment) в котором 3 поля:
tab1.f1 tab1.f2 = tab2.f1 tab1.f3
Хочу в этом гриде сделать сортировку по ИМЕНАМ, т.е. не так:
поле1поле2 поле31 Леша 32 Катя 63 Жора 14 Маша 4
а вот так:
поле1поле2 поле33 Жора 12 Катя 61 Леша 34 Маша 4
Как такое вымучить?
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825237
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выводите в гриде результат запроса, а не таблицу с relation
С уважением, Алексей
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825290
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, не хочу курсор
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825456
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> нет, не хочу курсор

О, Великий Нехочуха.


Записи в подчиненной таблице выводятся в порядке, определенным порядком
следования записей в родительской таблице.

Как добъешься обратного - сообщи.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825482
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот собственно поэтому и спрсил, мало ли мож кто умный знает :)
но курсор мне не нужен
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825814
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так поменяй местами главную и подчиненную таблицу! Т.е. сделай Relation не от tab1 к tab2, а наоборот, от tab2 к tab1. Соответственно, укажи у Grid в качестве RecordSource = "tab2"
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825841
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Imperous

огласите еще один раз причины,
по которым Вы не можете создавать временные отборы в родные курсоры?

Ваша задача решается простым отбором с объединением (добавлением избыточной колонки)
и сортировкой именно по избыточной колонке.
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35825843
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМТак поменяй местами главную и подчиненную таблицу! Т.е. сделай Relation не от tab1 к tab2, а наоборот, от tab2 к tab1. Соответственно, укажи у Grid в качестве RecordSource = "tab2"
нет, такой вариант не подойдет - tab1 - в любом случае главная, и в ней насамом деле много полей и я хочу чтоб по всем этим полям можно было так сортировать
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35826211
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ну. Сиди и хоти.

PS а ведь можно было бы селать одним запросом и временными индексами по
каждому полю, по которому надо сортировать.

Или по каждой сортировке делать свою выборку. Это зависит от объема выборки
и интенсивности пересортировок.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35826595
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov Rinat
Ну ну. Сиди и хоти.

PS а ведь можно было бы селать одним запросом и временными индексами по
каждому полю, по которому надо сортировать.

Или по каждой сортировке делать свою выборку. Это зависит от объема выборки
и интенсивности пересортировок.

можно пример?
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35826713
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperousможно пример?
Ну например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
IF !USED('outdata')
     CREATE CURSOR outdata (f1 I, f2 C( 40 ), f3 I)
*-- Если захотите менять сортировку динамически
     INDEX IN f1 TAG TAG1
     INDEX IN f2 TAG TAG2
     INDEX IN f3 TAG TAG3
     SET ORDER TO
ENDIF
ZAP IN outdata
THISFORM.MyGrid.RecordSource = ""
INSERT INTO outdata ;
SELECT t1.f1, t2.f2, t1.f3 ;
FROM tab1 t1 inner join tab2 t2 on t1.f2 = t2.f1 ;
ORDER BY  2 
WITH THISFORM.MyGrid
     .RecordSource = "outdata"
     .Column1.ControlSource = "outdata.f1"
     .Column2.ControlSource = "outdata.f2"
     .Column3.ControlSource = "outdata.f3"
ENDWITH
А вот если надо сортировку менять динамически по выбору соответствующего столбца грида, то можно в событие Click каждого Header столбца добавить код такого вида:
Код: plaintext
1.
2.
3.
Header1.Click:
SET ORDER TO TAG1
Header2.Click:
SET ORDER TO TAG2
Ну и так далее..
Конечно, надо бы еще и картинку менять в Header, показывающий, что именно по этой колонке сортируются данные, предусмотреть смену порядка сортировка (SET ORDER TO ... или SET ORDER TO ... DESCENDING) при повторном нажатии на колоку с уже отсортированными данными и т.п.
Вариантов массу. Проще всего создать свой класс Header (а также Column и Grid :) ) и всю функциональность по работе с сортировками перенести в него. Тогда сможете использовать данную функциональность многократно.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35826743
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Aleksey-K

авторВаша задача решается простым отбором с объединением (добавлением избыточной колонки)
и сортировкой именно по избыточной колонке.

автор работает с непредподготовленными отборами
и не желает их создавать, однако считает, что придумать и решить
ставящиеся перед собой хотелки не изменя подхода к работе
с данными - это более правильное решение.
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35828706
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этот кусок я бы сделал не так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
IF !USED('outdata')
     CREATE CURSOR outdata (f1 I, f2 C( 40 ), f3 I)
*-- Если захотите менять сортировку динамически
     INDEX IN f1 TAG TAG1
     INDEX IN f2 TAG TAG2
     INDEX IN f3 TAG TAG3
     SET ORDER TO
ENDIF

Во первых создать курсор и потом его заполнять - это больше кода, чем просто
Код: plaintext
1.
select ... from ... into cursor
По необходимости можно добавить директиву READWRITE

Во вторых индексировать надо уже заполненный курсор - это отработает быстрее, чем заполнять индексированный курсор/таблицу, т.к. при вставке каждой записи будет пересчитываться и записываться индекс на новую строку. Тогда как индексация заполненного файла позволяет писать индексный файл большими пакетами.

и вот это
Код: plaintext
1.
     INDEX IN f1 TAG TAG1

я так понимаю, должно выглядеть вот так:
Код: plaintext
1.
     INDEX ON f1 TAG TAG1
При таком создании индекса, он будет удален самим фоксом, при закрытии курсора.
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35828771
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov RinatВот этот кусок я бы сделал не так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
IF !USED('outdata')
     CREATE CURSOR outdata (f1 I, f2 C( 40 ), f3 I)
*-- Если захотите менять сортировку динамически
     INDEX IN f1 TAG TAG1
     INDEX IN f2 TAG TAG2
     INDEX IN f3 TAG TAG3
     SET ORDER TO
ENDIF

Во первых создать курсор и потом его заполнять - это больше кода, чем просто
Код: plaintext
1.
select ... from ... into cursor
По необходимости можно добавить директиву READWRITE
.
Угу.. и потерять при этом текущую сортировку (возможно композитную), установленную пользователем. А имеено из-за ней весь топик..
С уважением, Алексей.
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35833421
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял, про какую сортировку идет речь, но при вот таком подходе мы
ее не потеряем?

INSERT INTO outdata ;
SELECT t1.f1, t2.f2, t1.f3 ;
FROM tab1 t1 inner join tab2 t2 on t1.f2 = t2.f1


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35833464
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov Rinat
Не совсем понял, про какую сортировку идет речь, но при вот таком подходе мы
ее не потеряем?

INSERT INTO outdata ;
SELECT t1.f1, t2.f2, t1.f3 ;
FROM tab1 t1 inner join tab2 t2 on t1.f2 = t2.f1



Конечно нет! Активный тэг индекса при ZAP и при INSERT .. SELECT не меняется, а при SELECT .. INTO курсор создается заново со всеми вытекающими последствиями.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Сортировка в гриде при имеющихся комбах
    #35833857
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Не совсем понял, про какую сортировку идет речь, но при вот
> таком подходе мы
> ее не потеряем?
>
> INSERT INTO outdata ;
> SELECT t1.f1, t2.f2, t1.f3 ;
> FROM tab1 t1 inner join tab2 t2 on t1.f2 = t2.f1
>
>
>
>
> Конечно нет! Активный тэг индекса при ZAP и при INSERT .. SELECT не
> меняется, а при SELECT .. INTO курсор создается заново со всеми
> вытекающими последствиями.



Чего-то совсем ничего не понимаю. Активный индекс на outdata ?
Так мы его еще не установили. мы только подготавливаем данные к отображению.

А вот на активный индекс на источнике нам глубоко фиолетово, т.к. порядок
сортировки будет установлен set order или сразу в select ... order by . Ы?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сортировка в гриде при имеющихся комбах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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