Красивое ограничение на таблицу
Модераторы: m0p3e, edward_K, Модераторы
Красивое ограничение на таблицу
Уважаемые коллеги, подскажите, как красиво организовать выборку. Дело в следующем. В интерфейсе я позволяю пользователю задать несколько ограничений на таблицу, например, делать отчет по всем дескрипторам или конкретному, по всем контрагентам или конкретному и т.д.
Затем следует заполнение временной таблицы с учетом условия. Сами понимаете, чем больше условий, тем больше приходится описывать заполнений.
Вопрос: можно ли затем обработать выбор пользователя как-то иначе, нежели писать многочисленные конструкции 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; // однако не удаляет
}
Мистика .`)
Затем следует заполнение временной таблицы с учетом условия. Сами понимаете, чем больше условий, тем больше приходится описывать заполнений.
Вопрос: можно ли затем обработать выбор пользователя как-то иначе, нежели писать многочисленные конструкции 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
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Красивое ограничение на таблицу
1. если можно задействовать некий цифровой индетификатор ( скажем цифровой номер группы пользователей ) то можно писать case.
можно также попробовать завести некий текстовый фалик для конфигурирования(dbf) или добавить свою таблу(ы).
2. если есть мистика то мешает привести полностью текст фейса - вдруг кто чего узреет.
3. правильней удаление писать как
delete sf where (( nrec_org == sf.corg )) ;
- это удаление по индексу
4. а чего не проверяешь если нужная запись в sf?
А ты из Хабаровска ?
можно также попробовать завести некий текстовый фалик для конфигурирования(dbf) или добавить свою таблу(ы).
2. если есть мистика то мешает привести полностью текст фейса - вдруг кто чего узреет.
3. правильней удаление писать как
delete sf where (( nrec_org == sf.corg )) ;
- это удаление по индексу
4. а чего не проверяешь если нужная запись в sf?
А ты из Хабаровска ?
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Красивое ограничение на таблицу
Edward_K полностью прав по п.2
Возможен вариант с баундсами.
Возможен вариант с баундсами.
Re: Красивое ограничение на таблицу
т.е. ты сначала вываливаешь все в свою таблицу, потом удаляешь то, что не подходит под условия?
Попробуй создать нормальный запрос, а все свот ограничения вынести в боундсы и включать из них те, которые необходимы для выполнения условий пользователя.
И все
Попробуй создать нормальный запрос, а все свот ограничения вынести в боундсы и включать из них те, которые необходимы для выполнения условий пользователя.
И все
Ищу возможности довести и так отличный продукт до еще большего блеска
Re: Красивое ограничение на таблицу
Edward_K, да, из Хабаровска
Забавно - в своем примере с удалением поробовал поменять местами поля:
if(nrec_org <> 0) // был вызван интерфейс GETKATOR
{
delete sf where nrec_org <> sf.corg;
}
заработало
Vitas, ага, ты прав - не очень-то элегантно
Насчет боундсов - тоже пришел к этому, пробую.
Забавно - в своем примере с удалением поробовал поменять местами поля:
if(nrec_org <> 0) // был вызван интерфейс GETKATOR
{
delete sf where nrec_org <> sf.corg;
}
заработало
Vitas, ага, ты прав - не очень-то элегантно
Насчет боундсов - тоже пришел к этому, пробую.
Галактика 8.10, Oracle 10g / 10.2.0.4
Re: Красивое ограничение на таблицу
С боундсами тоже проблемы:
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
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
Re: Красивое ограничение на таблицу
Чем компилишь?
Ищу возможности довести и так отличный продукт до еще большего блеска
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Красивое ограничение на таблицу
insert sf
(nrec,
DESCR,
NODOC,
DDOC,
CORG,
SUMMA)
select
- эт конечно круто , но вот баундсы нужно где т в другом месте определять .
обычно
Interface
create view V
as select
...
bounds byname =
;
еcли вьюшек много то попробуй их использовать как v.tbbyname
(nrec,
DESCR,
NODOC,
DDOC,
CORG,
SUMMA)
select
- эт конечно круто , но вот баундсы нужно где т в другом месте определять .
обычно
Interface
create view V
as select
...
bounds byname =
;
еcли вьюшек много то попробуй их использовать как v.tbbyname
Re: Красивое ограничение на таблицу
Вообще то верно, я даже не заметил, когда читал его мессагу
Ищу возможности довести и так отличный продукт до еще большего блеска
Re: Красивое ограничение на таблицу
Edward_K, ага, я понял, что баундсы определяются только в конструкции create view. Жаль...
Галактика 8.10, Oracle 10g / 10.2.0.4