powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / order
7 сообщений из 7, страница 1 из 1
order
    #33468372
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
создал remote view (ODBC)

в нем сортировка order by xxx

как потом поменять сортировку? т.е. изменить сортировку курсора, перейти на сортировку по другому полю?

база MSSQL.

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

за раннее спасибо, фокс
...
Рейтинг: 0 / 0
order
    #33468391
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Можно сделать параметризированный ORDER BY

ORDER BY ?MyPar

Правда это можно сделать только при программном создании Remote View командой CREATE SQL VIEW. Через дизайнер такого не сделать

2) Можно сделать в дизайнере вычисляемое поле примерно такого вида

CASE WHEN ?MyPar=1 THEN Field1 ELSE Field2 END

и установить ORDER BY по этому полю.

По сути, тот же параметризированный ORDER BY, но несколько другим способом.

Объяснять, что такое парметризированное View и как с ним работать надо?
...
Рейтинг: 0 / 0
order
    #33468767
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ1) Можно сделать параметризированный ORDER BY

ORDER BY ?MyPar

Правда это можно сделать только при программном создании Remote View командой CREATE SQL VIEW. Через дизайнер такого не сделать

2) Можно сделать в дизайнере вычисляемое поле примерно такого вида

CASE WHEN ?MyPar=1 THEN Field1 ELSE Field2 END

и установить ORDER BY по этому полю.

По сути, тот же параметризированный ORDER BY, но несколько другим способом.

Объяснять, что такое парметризированное View и как с ним работать надо?

спасибо за информацию, что такое параметр знаю, работаю с ним, жаль в дизайнере нельзя использовать, а вот конструкцию CASE WHEN ?MyPar=1 THEN Field1 ELSE Field2 END в хелпе не нашел, но попробую.

да, неудобство, в дельфи есть грид в котором сортировка происходит при клике на заголовке поля - удобно, один дельфист показывал, а нам вот извращаться приходится...

спасибо.
...
Рейтинг: 0 / 0
order
    #33469217
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фокса вот конструкцию CASE WHEN ?MyPar=1 THEN Field1 ELSE Field2 END в хелпе не нашел
Это надо смотреть "Books OnLine", сокращенно BOL. Т.е. HELP к MS SQL.

Ты же строишь Remote View к MS SQL, значит любые выражения в этом Remote View должны быть в синтаксисе MS SQL, а вовсе не FoxPro.

фоксда, неудобство, в дельфи есть грид в котором сортировка происходит при клике на заголовке поля - удобно, один дельфист показывал, а нам вот извращаться приходится...
Как там реализовано в Delphi я не знаю. Но, наверняка за такую сортировку им тоже чем-то приходится платить. Т.е. неудобства будут в чем-то другом.

А для FoxPro стандартным решением является именно создание индексов. Т.е. индексирование Remote View и установка по щелчку на заголовок Grid нужного главного индекса. Это не так сложно как кажется.
...
Рейтинг: 0 / 0
order
    #33469258
фокс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ фокса вот конструкцию CASE WHEN ?MyPar=1 THEN Field1 ELSE Field2 END в хелпе не нашел
Это надо смотреть "Books OnLine", сокращенно BOL. Т.е. HELP к MS SQL.

Ты же строишь Remote View к MS SQL, значит любые выражения в этом Remote View должны быть в синтаксисе MS SQL, а вовсе не FoxPro.

фоксда, неудобство, в дельфи есть грид в котором сортировка происходит при клике на заголовке поля - удобно, один дельфист показывал, а нам вот извращаться приходится...
Как там реализовано в Delphi я не знаю. Но, наверняка за такую сортировку им тоже чем-то приходится платить. Т.е. неудобства будут в чем-то другом.

А для FoxPro стандартным решением является именно создание индексов. Т.е. индексирование Remote View и установка по щелчку на заголовок Grid нужного главного индекса. Это не так сложно как кажется.

это не сложно, но я столкнулся с ситуацией, что если два пользователя локально проиндексировали поле, и потом один из них внес новую запись, то другой этой записи не увидит, т.к. его локальный индекс ее игнорирует, хотя и делается requer().

по поводу ремоут, я его строю в вфп, и выглядит он так:

SELECT Rasp.vhod_num, Rasp.control, Rasp.otv_kontr, Rasp.n_kart_p,;
Rasp.date_reg, Rasp.isp, Rasp.type_doc, Rasp.tema_doc, Rasp.contests,;
Rasp.visa, Rasp.rassilka, Rasp.data_ot_p, Rasp.data_ot_r, Rasp.n_kart_r,;
Rasp.rez, Rasp.dsk, Rasp.tip;
FROM ;
dbo.rasp Rasp;
ORDER BY Rasp.vhod_num

DBSetProp(ThisView,"View","SendUpdates",.T.)
DBSetProp(ThisView,"View","BatchUpdateCount",1)
DBSetProp(ThisView,"View","CompareMemo",.T.)
DBSetProp(ThisView,"View","FetchAsNeeded",.F.)
DBSetProp(ThisView,"View","FetchMemo",.T.)
DBSetProp(ThisView,"View","FetchSize",-1)
DBSetProp(ThisView,"View","MaxRecords",-1)
DBSetProp(ThisView,"View","Prepared",.F.)
DBSetProp(ThisView,"View","ShareConnection",.T.)
DBSetProp(ThisView,"View","AllowSimultaneousFetch",.F.)
DBSetProp(ThisView,"View","UpdateType",1)
DBSetProp(ThisView,"View","UseMemoSize",255)
DBSetProp(ThisView,"View","Tables","dbo.rasp")
DBSetProp(ThisView,"View","WhereType",1)

DBSetProp(ThisView+".vhod_num","Field","DataType","N(9)")
DBSetProp(ThisView+".vhod_num","Field","UpdateName","dbo.rasp.vhod_num")
DBSetProp(ThisView+".vhod_num","Field","KeyField",.T.)
DBSetProp(ThisView+".vhod_num","Field","Updatable",.F.)

DBSetProp(ThisView+".control","Field","DataType","L")
DBSetProp(ThisView+".control","Field","UpdateName","dbo.rasp.control")
DBSetProp(ThisView+".control","Field","KeyField",.F.)
DBSetProp(ThisView+".control","Field","Updatable",.T.)

DBSetProp(ThisView+".otv_kontr","Field","DataType","C(25)")
DBSetProp(ThisView+".otv_kontr","Field","UpdateName","dbo.rasp.otv_kontr")
DBSetProp(ThisView+".otv_kontr","Field","KeyField",.F.)
DBSetProp(ThisView+".otv_kontr","Field","Updatable",.T.)

DBSetProp(ThisView+".n_kart_p","Field","DataType","C(7)")
DBSetProp(ThisView+".n_kart_p","Field","UpdateName","dbo.rasp.n_kart_p")
DBSetProp(ThisView+".n_kart_p","Field","KeyField",.F.)
DBSetProp(ThisView+".n_kart_p","Field","Updatable",.T.)

DBSetProp(ThisView+".date_reg","Field","DataType","D")
DBSetProp(ThisView+".date_reg","Field","UpdateName","dbo.rasp.date_reg")
DBSetProp(ThisView+".date_reg","Field","KeyField",.F.)
DBSetProp(ThisView+".date_reg","Field","Updatable",.T.)

DBSetProp(ThisView+".isp","Field","DataType","C(80)")
DBSetProp(ThisView+".isp","Field","UpdateName","dbo.rasp.isp")
DBSetProp(ThisView+".isp","Field","KeyField",.F.)
DBSetProp(ThisView+".isp","Field","Updatable",.T.)

DBSetProp(ThisView+".type_doc","Field","DataType","C(59)")
DBSetProp(ThisView+".type_doc","Field","UpdateName","dbo.rasp.type_doc")
DBSetProp(ThisView+".type_doc","Field","KeyField",.F.)
DBSetProp(ThisView+".type_doc","Field","Updatable",.T.)

DBSetProp(ThisView+".tema_doc","Field","DataType","C(32)")
DBSetProp(ThisView+".tema_doc","Field","UpdateName","dbo.rasp.tema_doc")
DBSetProp(ThisView+".tema_doc","Field","KeyField",.F.)
DBSetProp(ThisView+".tema_doc","Field","Updatable",.T.)

DBSetProp(ThisView+".contests","Field","DataType","M")
DBSetProp(ThisView+".contests","Field","UpdateName","dbo.rasp.contests")
DBSetProp(ThisView+".contests","Field","KeyField",.F.)
DBSetProp(ThisView+".contests","Field","Updatable",.T.)

DBSetProp(ThisView+".visa","Field","DataType","C(25)")
DBSetProp(ThisView+".visa","Field","UpdateName","dbo.rasp.visa")
DBSetProp(ThisView+".visa","Field","KeyField",.F.)
DBSetProp(ThisView+".visa","Field","Updatable",.T.)

DBSetProp(ThisView+".rassilka","Field","DataType","C(150)")
DBSetProp(ThisView+".rassilka","Field","UpdateName","dbo.rasp.rassilka")
DBSetProp(ThisView+".rassilka","Field","KeyField",.F.)
DBSetProp(ThisView+".rassilka","Field","Updatable",.T.)

DBSetProp(ThisView+".data_ot_p","Field","DataType","D")
DBSetProp(ThisView+".data_ot_p","Field","UpdateName","dbo.rasp.data_ot_p")
DBSetProp(ThisView+".data_ot_p","Field","KeyField",.F.)
DBSetProp(ThisView+".data_ot_p","Field","Updatable",.T.)

DBSetProp(ThisView+".data_ot_r","Field","DataType","D")
DBSetProp(ThisView+".data_ot_r","Field","UpdateName","dbo.rasp.data_ot_r")
DBSetProp(ThisView+".data_ot_r","Field","KeyField",.F.)
DBSetProp(ThisView+".data_ot_r","Field","Updatable",.T.)

DBSetProp(ThisView+".n_kart_r","Field","DataType","C(7)")
DBSetProp(ThisView+".n_kart_r","Field","UpdateName","dbo.rasp.n_kart_r")
DBSetProp(ThisView+".n_kart_r","Field","KeyField",.F.)
DBSetProp(ThisView+".n_kart_r","Field","Updatable",.T.)

DBSetProp(ThisView+".rez","Field","DataType","M")
DBSetProp(ThisView+".rez","Field","UpdateName","dbo.rasp.rez")
DBSetProp(ThisView+".rez","Field","KeyField",.F.)
DBSetProp(ThisView+".rez","Field","Updatable",.T.)

DBSetProp(ThisView+".dsk","Field","DataType","D")
DBSetProp(ThisView+".dsk","Field","UpdateName","dbo.rasp.dsk")
DBSetProp(ThisView+".dsk","Field","KeyField",.F.)
DBSetProp(ThisView+".dsk","Field","Updatable",.T.)

DBSetProp(ThisView+".tip","Field","DataType","C(3)")
DBSetProp(ThisView+".tip","Field","UpdateName","dbo.rasp.tip")
DBSetProp(ThisView+".tip","Field","KeyField",.F.)
DBSetProp(ThisView+".tip","Field","Updatable",.T.)

поменять сортировку можно через order, но в процессе работы (когда он открыт) я не нашел метода смены сортировки.
...
Рейтинг: 0 / 0
order
    #33469290
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фокссоздал remote view (ODBC)
...
как потом поменять сортировку?
...

sele MyView
index on ... tag ...
...
Рейтинг: 0 / 0
order
    #33470309
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фокспоменять сортировку можно через order, но в процессе работы (когда он открыт) я не нашел метода смены сортировки.
А говоришь, пользовался параметрами...

Если сделать параметризированный ORDER BY (любым способом), то надо просто перед Requery() подсунуть другое значение параметра:

MyPar = 2
Requery("MyView")

Однако такой способ имеет тот недостаток, что у тебя сортировка всегда будет только по возрастанию. Нельзя будет менять значение DESC или ASC.

Если же проиндексировать View, то это не проблема.

SET ORDER TO 1 ASC && соритровака по возрастанию
SET ORDER TO 1 DESC && соритровака по убыванию

Оптимальный вариант - это проиндексировать View по всем отображаемым в Grid полям сразу после его открытия (или после наполнения).

Кстати, никаких глюков при обновлении не заметил. Индекс корректно обновляется после Requery(). Все изменения сделанные другим пользователем также видны.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / order
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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