Красивое ограничение на таблицу

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

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

Ответить
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Красивое ограничение на таблицу

Сообщение Serges »

Уважаемые коллеги, подскажите, как красиво организовать выборку. Дело в следующем. В интерфейсе я позволяю пользователю задать несколько ограничений на таблицу, например, делать отчет по всем дескрипторам или конкретному, по всем контрагентам или конкретному и т.д.
Затем следует заполнение временной таблицы с учетом условия. Сами понимаете, чем больше условий, тем больше приходится описывать заполнений.
Вопрос: можно ли затем обработать выбор пользователя как-то иначе, нежели писать многочисленные конструкции IF {...} ELSE {...}?

Я попробовал после заполнения временной таблицы (sf) обрабатывать её таким образом:

if(nrec_org <> 0) // был вызван интерфейс GETKATOR
{
delete sf where corg <> nrec_org;
}

однако из таблицы sf удаляются почему-то все записи ???

Для интереса попробовал
if(nrec_org <> 0) // был вызван интерфейс GETKATOR
{
delete sf where corg = nrec_org;
}

запись не удаляется ???

При этом, nrec_org валидный, проверил:
if(nrec_org <> 0) // был вызван интерфейс GETKATOR
{
GetFirst katorg where ((nrec_org == katorg.nrec)); // получаю организацию
Message(katorg.name,okButton); // проверяю, что собственно должно удалиться
delete sf where corg = nrec_org; // однако не удаляет
}

Мистика .`)
Галактика 8.10, Oracle 10g / 10.2.0.4
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Красивое ограничение на таблицу

Сообщение edward_K »

1. если можно задействовать некий цифровой индетификатор ( скажем цифровой номер группы пользователей ) то можно писать case.
можно также попробовать завести некий текстовый фалик для конфигурирования(dbf) или добавить свою таблу(ы).
2. если есть мистика то мешает привести полностью текст фейса - вдруг кто чего узреет.
3. правильней удаление писать как
delete sf where (( nrec_org == sf.corg )) ;
- это удаление по индексу
4. а чего не проверяешь если нужная запись в sf?
:)
А ты из Хабаровска ?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Красивое ограничение на таблицу

Сообщение Den »

Edward_K полностью прав по п.2 :)
Возможен вариант с баундсами.
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Красивое ограничение на таблицу

Сообщение Vitas »

т.е. ты сначала вываливаешь все в свою таблицу, потом удаляешь то, что не подходит под условия?

Попробуй создать нормальный запрос, а все свот ограничения вынести в боундсы и включать из них те, которые необходимы для выполнения условий пользователя.

И все
Ищу возможности довести и так отличный продукт до еще большего блеска
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Красивое ограничение на таблицу

Сообщение Serges »

Edward_K, да, из Хабаровска :)

Забавно - в своем примере с удалением поробовал поменять местами поля:

if(nrec_org <> 0) // был вызван интерфейс GETKATOR
{
delete sf where nrec_org <> sf.corg;
}

заработало ;)

Vitas, ага, ты прав - не очень-то элегантно ;)
Насчет боундсов - тоже пришел к этому, пробую.
Галактика 8.10, Oracle 10g / 10.2.0.4
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Красивое ограничение на таблицу

Сообщение Serges »

С боундсами тоже проблемы:

insert sf
(nrec,
DESCR,
NODOC,
DDOC,
CORG,
SUMMA)
select
BaseDoc.nrec,
BaseDoc.DESCR,
BaseDoc.NODOC,
BaseDoc.DDOC,
BaseDoc.CORG,
BaseDoc.SUMMA
from BaseDoc
Bounds b1 = _kontrag == BaseDoc.corg
Bounds b2 = _dscr == BaseDoc.descr(noindex);

if(kontrag <> 'Все')
{
PushBounds(tbb1);
}
if(dscr <> 'Все')
{
PushBounds(tbb2);
}

Компилятор матерится: Ошибка: Нет такой функции,поля или метода, или неверный контекст использования:TBB1
Галактика 8.10, Oracle 10g / 10.2.0.4
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Красивое ограничение на таблицу

Сообщение Vitas »

Чем компилишь?
Ищу возможности довести и так отличный продукт до еще большего блеска
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Красивое ограничение на таблицу

Сообщение Serges »

Компилятором vip.exе
Галактика 8.10, Oracle 10g / 10.2.0.4
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Красивое ограничение на таблицу

Сообщение edward_K »

insert sf
(nrec,
DESCR,
NODOC,
DDOC,
CORG,
SUMMA)
select
- эт конечно круто , но вот баундсы нужно где т в другом месте определять .
обычно
Interface
create view V
as select
...
bounds byname =
;
еcли вьюшек много то попробуй их использовать как v.tbbyname
:)
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Красивое ограничение на таблицу

Сообщение Vitas »

:)

Вообще то верно, я даже не заметил, когда читал его мессагу
Ищу возможности довести и так отличный продукт до еще большего блеска
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Re: Красивое ограничение на таблицу

Сообщение Serges »

Edward_K, ага, я понял, что баундсы определяются только в конструкции create view. Жаль...
Галактика 8.10, Oracle 10g / 10.2.0.4
Ответить