Помогите сделать сортировку....

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

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

Ответить
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Помогите сделать сортировку....

Сообщение Ренат »

Доброго всем времени суток!
Тема уже сто раз обсуждалась, но я так и не усвоил для себя как решается эта задача.

Есть простой интерфейс. В таблицу Custlic добавленно собственное поле BdateGLVZ. Необходимо, чтобы при выводе данных записи соритровались по этому полю.
Приведу полностью текс интерфейса.

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

Interface License_sorting 'Сортировка лицензий';
create view as
select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER BY CUSTLIC.BdateGLVZ;
Browse brs_listLicense;
table  CUSTLIC;
Fields
   CUSTLIC.SerijaGLVZ     'Серия'                          :[5] ,Protect;
   CUSTLIC.NomerGLVZ      'Номер'                          :[12],Protect;
   CUSTLIC.BDateGLVZ      'Дата начала'                    :[12],Protect;
   CUSTLIC.EDateGLVZ      'Дата окончания'                 :[12],Protect;
end;//brs_listLicense;
end. //interface
Скажите, что нужно сделать, чтобы выводились все записи? Сейчас из трех реально существующих записей выводиться только одна.....
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Помогите сделать сортировку....

Сообщение KATZ »

Добавьте в таблицу индекс по комбинации полей cDog+BDateGLVZ.
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Re: Помогите сделать сортировку....

Сообщение Ренат »

Не разрешают добавить индекс. Хотя, раз поля добавили, можно было бы уж и индексы завести...
Вобщем нужно без индексов.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Помогите сделать сортировку....

Сообщение Masygreen »

ну тогда загружайте таблицу в свою времянку, где описан нужный индекс .. и сработайте с ней в интерфейсе
Время ведет!
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Re: Помогите сделать сортировку....

Сообщение Ренат »

Это я понимаю. Можно при открытии интерфейса все грузить во временную таблицу и синхронизировать с основной, но хотелось бы все сделать без таких хитростей.
Неужели нельзя сделать сортировку без индекса?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Помогите сделать сортировку....

Сообщение galover »

а что order by external не фурычит?
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Re: Помогите сделать сортировку....

Сообщение Ренат »

Нет. Попробовал вот такой вариант:

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

Interface License_sorting 'Сортировка лицензий';
create view as
select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER byBdate External  BY CUSTLIC.BdateGLVZ;

Browse brs_listLicense;
table  CUSTLIC;
Fields
   CUSTLIC.SerijaGLVZ     'Серия'                          :[5] ,Protect;
   CUSTLIC.NomerGLVZ      'Номер'                          :[12],Protect;
   CUSTLIC.BDateGLVZ      'Дата начала'                    :[12],Protect;
   CUSTLIC.EDateGLVZ      'Дата окончания'                 :[12],Protect;
end;//brs_listLicense;
HandleEvent
cminit:
{
     setorder(tibyBdate);
     CallToNeighbours(cmSetPos,#CUSTLIC);
};
end;
end. //interface
Так же на экране отображается только одна запись из трех реально существующих.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Помогите сделать сортировку....

Сообщение galover »

а если написать просто:

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

select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External  BY CUSTLIC.BdateGLVZ;
и убрать:

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

cminit:
{
     setorder(tibyBdate);
     CallToNeighbours(cmSetPos,#CUSTLIC);
};
?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Помогите сделать сортировку....

Сообщение galover »

ну а вообще в support-e вот такой запрос:

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

select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External  BY CUSTLIC.BdateGLVZ;
нормально отрабатывает?
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Помогите сделать сортировку....

Сообщение n0where »

А зачем EXTERNAL в ORDER BY?

Кстате могет помочь

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

bounds onlyOrder
       ordered by CUSTLIC.BdateGLVZ
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Re: Помогите сделать сортировку....

Сообщение Ренат »

ну а вообще в support-e вот такой запрос:
select CUSTLIC.SerijaGLVZ, CUSTLIC.NomerGLVZ, CUSTLIC.BDateGLVZ, CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External BY CUSTLIC.BdateGLVZ;

нормально отрабатывает?
Да, отрабатывает нормально. Возвращает все три лицензии.
Переделал интерфейс с исользованием этого запроса. Убрал обработчик cmInit. Так же отображает только одну лицензию.

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

Interface License_sorting 'Сортировка лицензий';
create view as
select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External  BY CUSTLIC.BdateGLVZ;

Browse brs_listLicense;
table  CUSTLIC;
Fields
   CUSTLIC.SerijaGLVZ     'Серия'                          :[5] ,Protect;
   CUSTLIC.NomerGLVZ      'Номер'                          :[12],Protect;
   CUSTLIC.BDateGLVZ      'Дата начала'                    :[12],Protect;
   CUSTLIC.EDateGLVZ      'Дата окончания'                 :[12],Protect;
end;//brs_listLicense;

end. //interface
А зачем EXTERNAL в ORDER BY?

Кстате могет помочь

bounds onlyOrder
ordered by CUSTLIC.BdateGLVZ
Не получилось, пишет ошибку: Нужен ключ для BdateGLVZ для CustLic
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Помогите сделать сортировку....

Сообщение galover »

Да уж, похоже очередной глюк Атлантиса. Нужно в ТП писать. Можно в качестве костыля написать так:

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

Browse brs_listLicense;
viewTable;
Fields
  ...
Ответить