Страница 1 из 1
фильтры и сортировки
Добавлено: 28 апр 2003, 12:11
margo
Уважаемые! Помогите разъяснением возможностей галактики на поприще разнообразных сортировок данных в документах.
К примеру, необходимо установить сортировку по баркоду в спецификации ПЗ. Облазила всю настройку пользователя. Кое-что поменяла в настройках про МС, но результат необходимый не получила.
Очень интересуюсь такого рода вопросами. Прошу, по-возможности, не оставить без внимания мою просьбу.
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 13:37
Den
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 13:50
paul
Нету в Уважаемой Галактике с двумя сотнями Программистами, расширенной сортировки, Например, запрос по SpSopr сортироавть по
KatMc.BarKod или (Еще круче, но !жизнено важно!)
((...
const == KatSopr.cnZakaz
and KatSopr.nRec == SpSopr.cSopr
and SpSopr.cMcUsl == KatMc.nRec))
order by KatMc.BarKod;
и etc. Надо изгалятся со связями, переставлять левые и правые части,( но это эротика какая-то получается) применять Dounds-ы, при это запрос формируется па порядок дольше или даже на ДВА.
В Vipe не работает, В ARD - тоже.
Правда стоит Pervasive, но на SQL я думаю суть деля не меняется.
Опровергните, пожалуйста Меня.
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 14:17
margo
как-то всё совсем уж грустно выходит...
ещё в прошлом веке люди начали запускаться в космос... а в нашем 21 веке, галактика не принимает во внимание элементарные и необходимые вещи при работе с базой данных...
и назвать это эротикой - язык не поворачивается... не иначе как извращение и не назовёшь
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 15:41
edward_K
по поводу широты сортировок
1. если нет подходящего индекса то живой Sql не построишь - на всех СУБД это будет решаться выгрузкой в определенную таблицу в память - в этом смысле Галактика не очень далеко ушла.
2. bounds(впрочем как и сортировки в ard работают - правда сам не пробовал - но по моей подсказке попробовали-сказали спасибо)
имя_вьюера.PushBounds(tbваш_bounds)
3.самый оптимальный вариант использовать некую временую таблицу с сортировкой по текстовому полю и на ее основе строить select-длина индекса не может превышать 250 символов. я предпочитаю свои, но можно либо таблицы в памяти, либо существующие из словаря(Formarks например)
4.в выборе пользовательской аналитики 584 можно менять сортировку нажатием на шапку колонки - но для всего так не сделать.
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 17:02
margo
Я, конечно, очень благодарна вам, Edvard_K, за конструктивный ответ, но дело в том, что я ещё не "ухарь безвозмездный" в этой области... и для меня не всё так ясно (прошу прощения за бессовестное признание в своём непрофессионализме... пока)
Не могли бы вы мне конкретно по шагам объяснить, как решить свою проблему (вышепредставленную)пользуясь п2 или п3 вашей методы... чтобы я уяснила на примере?
Будте так добры и сочтите это за доблестное действо.
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 17:29
Den
Мож, конечно, я не прав, но по первому пункту Edward-a ответ не так однозначен.
Например, в TSQL MSSQL при использовании order by без наличия нужного индекса в select-e время выборки немного отличается от того, когда этот индекс есть.В галактическом SQL - разница во времени более существенна.Конечно, я не говорю, что совсем без индексов нужно обходиться...
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 17:29
edward_K
2 пункт
.Form PERSSORT
.ard
.var
wtyp :word ;
.endvar
.create view vpers
as select persons.fio,persons.tabnmb
where (( 'С' == Persons.ISEMPLOYEE ))
bounds byFio = 'С' == Persons.ISEMPLOYEE
ordered by Persons.ISEMPLOYEE,persons.fio
bounds bytabn = 'С' == Persons.ISEMPLOYEE
ordered by Persons.ISEMPLOYEE,persons.tabnmb
;
.begin
wtyp:=1 ;
case wtyp of
0: vpers.PushBounds(tbbyfio) ;
else vpers.PushBounds(tbbytabn) ;
end ;
end.
.fields
vpers.persons.tabnmb
vpers.persons.fio
.endfields
.{table 'vpers.persons'
@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.}
.endform
меняйте wtyp в програмном блоке и пря из support смотрите(shift+F9-выполнение)
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 17:39
edward_K
3 пункт посложнее - укажу только основные моменты.
.begin
// берем таблу formarks
//грохаем все где 55 == formarks.choice
vpers.delete formarks where (( 55 == formarks.choice )) ;
// заполняем поля
if vpers.getfirst persons=0
do begin
vpers.formarks.choice:=55 ;
vpers.formarks.fio:=vpers.persons.fio ;
// здесь пишем некое выражение для сортировки
// можно и в fio - если ключа не хватит
vpers.formarks.field2:=vpers.persons.fio ;
vpers.formarks.cpodr :=vpres.persons.nrec
vpers.insert current formarks ;
end while vpers.getnext persons=tsok ;
в select пишем
from formarks(formarks12)
((
formarks.cpodr == persons.nrec
)) ;
и вывод делаем соотв. по табле formarks
а дальше ограничено только вашей фантазией.
Я обычно беру pad(substr(name,1,20,20)+string(nrec,20)
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 17:48
edward_K
DEN
конечно - тут весь вопрос в способе создания вьюхи для сортировки - я могу сказать,что можно строить произвольные сортировки и в гале - но когда дело доходит до произвольной сортировки и гала ругается что select можно построить только на внешней выгрузке,то на Pervasive это сильно тормозит.
Вопрос - никто не пробовал на MsSql или Oracle Галактике пользоваться внешними выгрузками?
Re: фильтры и сортировки
Добавлено: 28 апр 2003, 18:01
Den
В смысле на Галактике под MSSQL или Oracle средствами Atlantis-а ?
А pervasive мож и не тормозило бы, если бы разработчики использовали возможности Sqalable SQl
2Den
Добавлено: 29 апр 2003, 08:29
Goblin
Не Scalable SQL, а Transactional Engine(с 2000 релиза) - тогда мож быть и имело место отсутствия тормозов, хотя вряд ли - юн еще Pervasive в ентом смысле ...
а именно Scalable SQL(на 7-ке и ниже) - увольте, более тормозной вещи не видемши ...
Re: 2Den
Добавлено: 29 апр 2003, 11:50
paul
Edward_K
твой пункт 2 в ARD работает по всем внешним выгрузкам, только успевай подставлять SetOrder(tiТвой_Ордер);
а в VIP-е можно использовать order by или bounds + ordered by только по индексам корневой таблицы. например корневая таблица одна, а сортировать нужно по индексу 2-ой или 3-ей подцепляемой таблице.
На самом деле, в жизни я встречаю часто, такие условия задач.
иначе только применять пункт 3.
Этим ограничением Языка, Галактионщики и создают свои коды программ закрытыми, т.е. более сложными и трижды закрученными в понимании и читабельности.
Твои Учебные аргументы в данном случае не прокатят.
А например, мне нужно внести изменение в корневую таблицу? Мне что, зайти в tmp-файл
(formark)брать ссылку на нее и запускать доп. функцию update корневая таблица?
Re: 2Den
Добавлено: 29 апр 2003, 17:19
edward_K
в корневую в смысле Persons в моем примере - у меня то вроде предполагается, что корневая formarks?
1. для этого есть синонимы.
2. если надо поменять Persons и после этого исправить сортировку то придется исправить и соотв.запись в formarks конечно. просто в случае SQL(MS того же) все это делается подобным же образом,но на уровне драйверов. здесь придется поизгаляться.