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

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

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

Ответить
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

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

Сообщение 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;
То, данные появляются и окошко с сообщением "Производится выгрузка" не выскакивает...
Из кода понятно, что мне необходимо делать выборку не только работающих на предприятии. Собственно вопрос, почему в первом случае нет данных?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

вы попали на внешнюю выгрузку - когда сортировка к таблице не попадают под один индекс.
ключа по DEPARTMENT нет (есть ISEMPLOYEE+ DEPARTMENT)
Вообще когда мне нужны и уволенные и работающие я либо по ISEMPLOYEE накладываю ограничение по интервалу между С и У, либо делаю два прохода - в вашем виде вы соберете еще с приказов на прием и с кандидатов и прочих товарищей, которые вам вовсе не товарищи. В Order by лучше перечислять все индексные поля, да и вообще если у вас есть не подвязанные таблицы, то лучше порядок задать в bounds. Упростите запрос до одной таблицы - наверняка заработает и так.
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

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

Сообщение niteo »

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


И если можно, то еще пара вопросов.
Всё же, почему нет данных, ведь в support-е все прекрасно выгружается?
Еще Вы пишете:
Вообще когда мне нужны и уволенные и работающие я либо по ISEMPLOYEE накладываю ограничение по интервалу между С и У, либо делаю два прохода - в вашем виде вы соберете еще с приказов на прием и с кандидатов и прочих товарищей, которые вам вовсе не товарищи. В Order by лучше перечислять все индексные поля, да и вообще если у вас есть не подвязанные таблицы, то лучше порядок задать в bounds. Упростите запрос до одной таблицы - наверняка заработает и так.
Зачем в Order By перечислять все индексные поля?
При написании сложных условий, для меня кроется пока не решенный вопрос, как это делать правильно?
Делать несколько view, затем делая цикл по одному из них, делать выборку по getfirst из другого? Или накладывать боундсы? Или делать выгрузку во временную таблицу, а ее уже потом подключать во view и в блоке where накладывать условия?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

"Или делать выгрузку во временную таблицу"

угу..полагаю время перегрузки данных по persons по временную будет не более процесса внешней выгрузки(при которой ,кстати. тоже создается некая динамическая таблица в памяти), зато индекс сделаете который Вам интересен .
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

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

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

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

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

        _loop viewtable
        {   
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

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

Сообщение niteo »

RAJAH писал(а): попробуйте

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

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

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

        _loop persons
        {   
            _loop spprikaz
            {
            };
        };
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

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

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

Сообщение RAJAH »

niteo писал(а):А если есть вложенные циклы?
Тогда оператор groupby поможет.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение Masygreen »

если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...
Время ведет!
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

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

Сообщение niteo »

Masygreen писал(а):если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...
Простите за дурацкий вопрос. В интерфейсе можно использовать прямой SQL?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

niteo писал(а):
Masygreen писал(а):если не первасив используйте лучше прямой SQL .. нафиг все эти куцые виевы ...
Простите за дурацкий вопрос. В интерфейсе можно использовать прямой SQL?
А Вообще в каком контексте делаете это vip-интерфейс ? это просто отчет или там будут элементы по работе с данными ?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

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