Interface и View

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

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

Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Interface и View

Сообщение Alexander »

Кто сможет ответить на пару простых вопросов!?
Создаю какой-то интерфейс

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

Interface test;
   create view as select * from таблица
                         where((подцепки)) and ограниченя
   Browse Таблица
      Fields
         Поле1;
         Поле2;
         ...
   end;
end.
Возникает проблема, если запрос слишком большой, то вызов интерфейса занимает длительное время. Можно ли как-то предотвратить выполнение запроса при запуске интерфейса, а произвести выборку, когда заполнен фильтр?
Вопрос 2-й: как можно перевыполнить запрос, если изменились "ограничения"??
oiko
Местный житель
Сообщения: 418
Зарегистрирован: 29 мар 2005, 17:49

Сообщение oiko »

Создай таблицу в памяти, сгрузи нужные данные из физ. таблиц туда - ускорится навигация в броузере (именно не открытие фейса а навигация напрягает).
Так многие стандартные фейсы работают.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Сделать в выборке баундсы
и включать их только когда уже выберешь фильтры.
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Понятно, значит запрос выполняется в любом случае...
Bounds не спасут :(( Дело в том, что выборка начинается с BaseDoc, к ней все цепляется...

Каким образом запрос его можно перевыполнить?
Последний раз редактировалось Alexander 29 ноя 2006, 14:33, всего редактировалось 1 раз.
oiko
Местный житель
Сообщения: 418
Зарегистрирован: 29 мар 2005, 17:49

Сообщение oiko »

по alt+B навесь фильтр
в событие по нему перегрузка баундсов и рескан/или перезапись таблы в памяти и рескан
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

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

Сообщение Den »

Вы бы лучше, Alexander, сами привели лог. таблицу...было бы видно хоть какие данные Вы пытаетесь получить
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

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

Interface Test  'Test';
   show at (,,60,10)
   create view TestView
select
  basedoc.ddoc   , 
  basedoc.summa  , 
  basedoc.cnote  , 
  katnotes.name  , 
  basedoc.nodoc  , 
  basedoc.direct , 
  basedoc.dform  , 

  basedoc.cOrg   , 
  katorg.name,     
  SchFact.dfact  , 
  schfact.summa  ,
  katsopr.snalogs, 
  schfact.num    , 
  katsopr.name   , 
  katsopr.dsopr  , 
  katsopr.nsopr  , 
  katsopr.vidsopr,  
  from basedoc,
       katorg
       where((
           BaseDoc.Nrec      ==  StepDoc.cBaseDoc
    and    BaseDoc.Direct    ==  Schfact.Direct
    and    StepDoc.Nrec      ==  Schfact.cStepDoc
    and    basedoc.cnote     ==  katnotes.nrec
    and    basedoc.corg      ==  katorg.nrec
    and    SchFact.Nrec      ==  KatSopr.cSchFact
));
На этот запрос навешиваю Bounds и Condition, но блин, состаришься, пока дождешься запуска интерфейса...
если навешать даты:

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

...))
   and     basedoc.ddoc >=  DOCDateFrom
   and  basedoc.ddoc <=  DOCDateTo;
   ...
то жить можно, но как-то вьюху нужно обновить, после смены дат в фильтре......
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Ну попробовал Вашу вью :
Interface Test 'Test';
show at (,,60,10)
create view
select
basedoc.ddoc ,
basedoc.summa ,
basedoc.cnote ,
katnotes.name ,
basedoc.nodoc ,
basedoc.direct ,
basedoc.dform ,

basedoc.cOrg ,
katorg.name,
SchFact.dfact ,
schfact.summa ,
katsopr.snalogs,
schfact.num ,
katsopr.name ,
katsopr.dsopr ,
katsopr.nsopr ,
katsopr.vidsopr
from basedoc,
katorg
where((
BaseDoc.Nrec == StepDoc.cBaseDoc
and BaseDoc.Direct == Schfact.Direct
and StepDoc.Nrec == Schfact.cStepDoc
and basedoc.cnote == katnotes.nrec
and basedoc.corg == katorg.nrec
and SchFact.Nrec == KatSopr.cSchFact
));

Panel p1;
browse br1 ;
table basedoc;
fields
basedoc.ddoc :[10],protect ;
basedoc.nodoc :[15],protect ;
katorg.name :[40],protect;
basedoc.summa :[12.2],protect ;
end;
end;
end.

Видимый элемент интера вполне быстро открывается...
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

И правда отрабатывает....
Den
Отправил Вам исходник по почте, надеюсь, не будете возражать...
В чем моя ошибка, не понимаю...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Сорри, но почту не могу сейчас проверить :sad:
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

Не должно тормозить, для всех подцепок и фильтров есть соотвествующие индексы. Плюс при построении Browse система считывает только те записи, которые необходимо считать сдля построения строк этого элемента.
Часом не локальную базу мучаете ? Там подобное имеет место быть
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Во!
Утром, после кофе, лучше думается....
проблема в то, что в примере у запроса убрал сортировки:

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

 order by basedoc.ddoc ,
            SchFact.NRec ,
            SpSopr.Nrec  ,
            KatSopr.NRec;
С ними все вешается....
Для чего делается внешняя выгрузка и как это обойти??
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

Смысл сортировки по NRec у SchFact, SpSopr, KatSopr ?

Уберите ее, смысла она не имеет в принципе ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

убрать-то уберу, но вопрос в другом: Внешняя выгрузка все равно производится, как с этим бороться??
Ответить