ORDER BY

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

ORDER BY

Сообщение hope »

Добрый день, ВСЕМ!

Может кто-нибудь объяснить: почему не правильно отрабатывает SELECT, если в него добавить ORDER BY?

Вот мой текст:
.CREATE VIEW N1
AS SELECT *
FROM HOPE_Real
WHERE ((ROOT==HOPE_Real.nrec
and MyPodr==HOPE_Real.podr_nrec
))
!ORDER BY HOPE_Real.mc_gr_kod, HOPE_Real.mc_name
;

Если раскомментировать ORDER BY, то для разных подразделений данные из таблицы HOPE_Real выходят от первого подразделению .

Если закомментирую - то все правильно выходит (для каждого подразделения - свои данные). Но нет сортировки.

Спасибо!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

вместо * перечислите поля, в том числе из oder by и будет вам относительное 8) счастие. Ну а вообще для своей то таблы могли и индекс сделать и тогда во From указываете нидескс соотв. условиям, либо в order by прописываете поля по индексу(!), да и ROOT==HOPE_Real.nrec абсолютно лишняя строка.
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение Ged »

Палка о двух концах.
Чтоб не мучиться с ордером
создайте в своей временной таблице индекс

Код: Выделить всё

with index
(
...
 HOPE_RealXXX = Podr_Nrec+mc_gr_kod+mc_name 
...
)
и укажите его явно в выборке, ну или ордер добавьте. Это уже не суть, т.к. в изначальном примере все ограничевается подразделением (индекс) и сортируется (тоже нужен индекс для быстроты и для "правильности")

в итоге получим

Код: Выделить всё

.Create View N1
As Select
 *
From HOPE_Real(HOPE_RealXXX)
WHERE 
((
   MyPodr==HOPE_Real.podr_nrec
))
; 
При явном указании индекса сортировка пойдет именно по нему.
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

А никто не в курсе эту проблему что нереально исправить что ли в самом движке? Может кто из реальных претендентов на Ай-фоны знает почему сия проблема стала фичей?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

видимо ТП не завалили не работаюшими формами.
Глючит это давно, но если прописать все аккуратно, то работает.
Вся проблема в том, что сваливается на внешнюю выгрузку. При том в фейсе это работает стабильней, да и на маленьких данных как правило проблем нет и в формах. Одна из проблем изменение условий - после этого надо принудительно перечитать таблу. В фейсе rereadrecrod или еще чего то можно придумать, в форме это вроде как не пашет. Нужно помнить, что выгрузка происходит при первом обращении к таблице - поэтому условия нужно задавать в самом начале формы. Ну а поскольку внешняя выгрузка то * просто противопоказана, а перечисление всех используеиых полей обязательно. Да еще - выгрузка работает стабильней если в order by добавить поля по фильтру, но не факт.
Вот сие например пашет на не очень мелких данных, но условия задаются в начале.

Код: Выделить всё

.create view vvv
as
select
        perssfo.givedate,
        katpodr.name,
        persons.fio,
        katmbp.name,
        x$users.xu$loginname
from
        perssfo
        ,perscard
        ,lschet
        ,persons
        ,katpodr
        ,katmbp
        ,x$users
where
((     perssfo.cperscard == perscard.nrec
   and perscard.clschet  == lschet.nrec
   and lschet.tperson    == persons.nrec
   and lschet.cex        == katpodr.nrec
   and perssfo.ckatmbp   == katmbp.nrec
   and perssfo.atl_lastuser == x$users.atl_nrec
))
  and
      perssfo.enddate  >= dtb
  and perssfo.GIVEDATE >= dtb
  and perssfo.GIVEDATE <= dte
  and (PersSfo.SPISDATE = date(0,0,0) or PersSfo.SPISDATE>=dtb)
  and 0000000000000000h <> perscard.clschet
order BY perssfo.GIVEDATE,katpodr.name,persons.fio,katmbp.name,x$users.xu$loginname;
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

А бестолку закидывать. Ответ разработчиков "Разработка FCOM закончена и никаких доработок по нему не будет". Причем даже в платных доработках было отказано. Пришла эра FR.
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

Пришла эра FR.
А причем тут FR? А как понял запросы хоть на FCOM хоть на VIP одного поля ягодки? Или ошибаюсь?
А время FR пришло году эдак в 2002 :) Через 7 лет и в Галактике заметили это. Правда отчетов в FR все равно катастрофически мало!
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Раскроем мысль: "Пришла эра FR в Галактике". :)

Вон чего еще забабахали:

Код: Выделить всё

* ПРОБЛЕМА В ПИР: 101.42820
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: FCom2FastReport
* ПРОЕКТ: Инструментарий прикладного программиста
* ДЕТАЛИЗАЦИЯ: FCom - исполнение, интерпретация
# ЧТО ИЗМЕНЕНО:         Формирование FCom-отчетов
        FastReport
----- СУТЬ ПРЕДЛОЖЕНИЯ -----
Для  FCOM-отчетов   реализовать  возможность   создания потока  данных  для  FastReport.
Дать возможность создания FR-отчетов по прототипу или присоединенной формам.
Их запуск из стандартного диалога выбора отчетов.

# КАК ИЗМЕНЕНО: В закладке "Отчеты по подгруппам" диалога выбора отчета 
добавлена кнопка "Добавить FR-отчет [F7]". По этой кнопке для текущей FCOM 
формы создается DataStream. После того как DataStream сформировался, 
запускается дизайнер отчетов. Созданный отчет можно проверить предварительным 
просмотром и сохранить в ресурс, задав имя отчета. Сохраненный FR-отчет можно в 
дальнейшем запускать на выполнение. Для этого достаточно выбрать его из списка 
диалога выбора отчетов. В текущей версии DataStream создается только для 
отчетов с простой структурой потока данных (статическая часть, вертикальный 
цикл).
Другое дело, что под разные задачи нужны разные инструментарии. Есть отчеты которые удобно получать в Word, Excel. И зарубать поддержку того же самого rtf...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

ilshat писал(а): А как понял запросы хоть на FCOM хоть на VIP одного поля ягодки? Или ошибаюсь?
Видимо все же не одного.. )
И есть еще 3-я ягодка - это запрос в модуле SQL саппорта )))
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Такой индекс у меня есть:
tmp_hope_real04=podr_Nrec+mc_gr_kod+Mc_Name,

Спасибо, ВСЕМ откликнувшимся!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: ORDER BY

Сообщение RAJAH »

Доброго времени суток. Не буду плодить темы, спрошу тут.
Почему-то долгое время работавший запрос теперь начал вызывать рантайм 216 системы. Путём экспериментов установил, что всё дело в описании сортировки в order by: если поля перечислены через "+" - всё, не прокатывает теперь. Вот, например:

Код: Выделить всё

select katorg.name, katorg.nrec, x$users.xu$loginname, katorg.atl_lastdate
from katorg, katorgdescr, katorgdescr katorgdescr1, x$users
where
((
katorg.atl_lastuser  /== x$users.atl_nrec and
katorg.nrec             /== katorgdescr.crec and
katorgdescr.cgroup == katorgdescr1.nrec
))
order by katorg.nrec+katorg.name; 
Если написать order by katorg.nrec, katorg.name, то компилируется.
Такая же ситуация и с другими запросами. Это причуды 5.4.35?
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: ORDER BY

Сообщение Vik »

А где вы вообще синтаксис такой нашли через "+"? В документации ясно сказано, что перечисление полей через запятую
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: ORDER BY

Сообщение Ged »

Vik писал(а):А где вы вообще синтаксис такой нашли через "+"? В документации ясно сказано, что перечисление полей через запятую
Ну дак, никто и не говорил, что нельзя писать например в

Код: Выделить всё

Select
 katorg.nrec+katorg.name (FieldName=NrecName)
По сути это вычисляемое поле. На 5.4.35 была ошибка с сортировкой (Order By) по вычисляемым полям.
На 5.4.35.02 исправили
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: ORDER BY

Сообщение Vik »

А, ну если задумано, что это вычисляемое поле, тогда ладно. Просто смысла что-то в этом не уловил
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: ORDER BY

Сообщение RAJAH »

* ПРОБЛЕМА В ПИР: 103.5109
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: Завал при выполнении запроса, если в Order by указать
вычисляемое поле
* ПРОЕКТ: Инструментарий прикладного программиста
* ДЕТАЛИЗАЦИЯ: Утилита UNI (DICOM,LOT)
# ЧТО ИЗМЕНЕНО:
Логические таблицы

----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
Runtime error при выполнении запроса с сортировкой по вычисляемому полю.

# КАК ИЗМЕНЕНО: Исправлено.

Ged прав.
Ответить