Страница 1 из 1

Не выгружает данные в view

Добавлено: 05 мар 2013, 10:49
niteo
Всем доброго времени!
Имеется интерфейс вот с таким view:

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

create view vBD
select   persons.department, persons.fio, spprikaz.ddoc, spprikaz.kolday, prikaz.mesto
from     persons, catalogs, spprikaz, prikaz, APPOINTMENTS, klkatego
where
        ((persons.department == catalogs.nrec and
        persons.nrec       == spprikaz.cpersons and
        persons.APPOINTCUR == APPOINTMENTS.nrec and
        Appointments.EMPCATEGORY == klkatego.nrec and
        1                  == spprikaz.tipdoc and
        spprikaz.cprikaz  /== prikaz.nrec))
order by Persons.Department;
При вызове интерфейса появляется вот такое окно:
Изображение
Оно висит в среднем секунд 10 - 15, затем пропадает. Появляется окно моего интерфейса.
Внутри интерфейса есть цикл по табличке

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

        _loop persons
        {   
так вот, при выполнении кода, табличка эта - ПУСТАЯ!
Но, если я делаю запрос данных таким образом:

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

select  persons.department, persons.fio, spprikaz.ddoc, spprikaz.kolday, prikaz.mesto
from   persons, catalogs, spprikaz, prikaz, APPOINTMENTS, klkatego
where
        (('С' == Persons.IsEmployee and
        persons.department == catalogs.nrec and
        persons.nrec       == spprikaz.cpersons and
        persons.APPOINTCUR == APPOINTMENTS.nrec and
        Appointments.EMPCATEGORY == klkatego.nrec and
        1                  == spprikaz.tipdoc and
        spprikaz.cprikaz  /== prikaz.nrec))
order by Persons.Department;
То, данные появляются и окошко с сообщением "Производится выгрузка" не выскакивает...
Из кода понятно, что мне необходимо делать выборку не только работающих на предприятии. Собственно вопрос, почему в первом случае нет данных?

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 11:30
edward_K
вы попали на внешнюю выгрузку - когда сортировка к таблице не попадают под один индекс.
ключа по DEPARTMENT нет (есть ISEMPLOYEE+ DEPARTMENT)
Вообще когда мне нужны и уволенные и работающие я либо по ISEMPLOYEE накладываю ограничение по интервалу между С и У, либо делаю два прохода - в вашем виде вы соберете еще с приказов на прием и с кандидатов и прочих товарищей, которые вам вовсе не товарищи. В Order by лучше перечислять все индексные поля, да и вообще если у вас есть не подвязанные таблицы, то лучше порядок задать в bounds. Упростите запрос до одной таблицы - наверняка заработает и так.

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 12:00
niteo
edward_K писал(а):вы попали на внешнюю выгрузку - когда сортировка к таблице не попадают под один индекс.
ключа по DEPARTMENT нет (есть ISEMPLOYEE+ DEPARTMENT)
Спасибо большое за замечание, упустил из виду этот момент!


И если можно, то еще пара вопросов.
Всё же, почему нет данных, ведь в support-е все прекрасно выгружается?
Еще Вы пишете:
Вообще когда мне нужны и уволенные и работающие я либо по ISEMPLOYEE накладываю ограничение по интервалу между С и У, либо делаю два прохода - в вашем виде вы соберете еще с приказов на прием и с кандидатов и прочих товарищей, которые вам вовсе не товарищи. В Order by лучше перечислять все индексные поля, да и вообще если у вас есть не подвязанные таблицы, то лучше порядок задать в bounds. Упростите запрос до одной таблицы - наверняка заработает и так.
Зачем в Order By перечислять все индексные поля?
При написании сложных условий, для меня кроется пока не решенный вопрос, как это делать правильно?
Делать несколько view, затем делая цикл по одному из них, делать выборку по getfirst из другого? Или накладывать боундсы? Или делать выгрузку во временную таблицу, а ее уже потом подключать во view и в блоке where накладывать условия?

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 12:23
Den
"Или делать выгрузку во временную таблицу"

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

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 12:23
RAJAH
niteo писал(а):Всё же, почему нет данных, ведь в support-е все прекрасно выгружается?
Вместо
niteo писал(а):

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

        _loop persons
        {   
попробуйте

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

        _loop viewtable
        {   

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 12:44
niteo
RAJAH писал(а): попробуйте

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

        _loop viewtable
        {   
А если есть вложенные циклы?

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

        _loop persons
        {   
            _loop spprikaz
            {
            };
        };

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 13:35
edward_K
Я бы поспорил насчет одинаковости времени прогона по индексу и внешней выгрузки - как то мне всегда казалось что второе работает гораздо медленнее, чем даже просто без условий выгружать.

Re: Не выгружает данные в view

Добавлено: 05 мар 2013, 14:08
RAJAH
niteo писал(а):А если есть вложенные циклы?
Тогда оператор groupby поможет.

Re: Не выгружает данные в view

Добавлено: 06 мар 2013, 02:26
Masygreen
если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...

Re: Не выгружает данные в view

Добавлено: 06 мар 2013, 10:53
niteo
Masygreen писал(а):если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...
Простите за дурацкий вопрос. В интерфейсе можно использовать прямой SQL?

Re: Не выгружает данные в view

Добавлено: 06 мар 2013, 11:26
Den
niteo писал(а):
Masygreen писал(а):если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...
Простите за дурацкий вопрос. В интерфейсе можно использовать прямой SQL?
А Вообще в каком контексте делаете это vip-интерфейс ? это просто отчет или там будут элементы по работе с данными ?

Re: Не выгружает данные в view

Добавлено: 06 мар 2013, 11:38
RAJAH
Masygreen писал(а):если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...
Не! Использую D-SQL только в особо тормозных случаях для скорости. В большинстве мест view устраивают. К тому же иногда бывают необходимы таблицы в памяти - тут мне точно легче во view.