Страница 1 из 1

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

Добавлено: 25 фев 2004, 09:55
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; // однако не удаляет
}

Мистика .`)

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

Добавлено: 25 фев 2004, 11:17
edward_K
1. если можно задействовать некий цифровой индетификатор ( скажем цифровой номер группы пользователей ) то можно писать case.
можно также попробовать завести некий текстовый фалик для конфигурирования(dbf) или добавить свою таблу(ы).
2. если есть мистика то мешает привести полностью текст фейса - вдруг кто чего узреет.
3. правильней удаление писать как
delete sf where (( nrec_org == sf.corg )) ;
- это удаление по индексу
4. а чего не проверяешь если нужная запись в sf?
:)
А ты из Хабаровска ?

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

Добавлено: 25 фев 2004, 11:31
Den
Edward_K полностью прав по п.2 :)
Возможен вариант с баундсами.

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

Добавлено: 25 фев 2004, 11:33
Vitas
т.е. ты сначала вываливаешь все в свою таблицу, потом удаляешь то, что не подходит под условия?

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

И все

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

Добавлено: 25 фев 2004, 11:59
Serges
Edward_K, да, из Хабаровска :)

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

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

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

Vitas, ага, ты прав - не очень-то элегантно ;)
Насчет боундсов - тоже пришел к этому, пробую.

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

Добавлено: 25 фев 2004, 14:02
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

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

Добавлено: 27 фев 2004, 12:13
Vitas
Чем компилишь?

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

Добавлено: 27 фев 2004, 14:17
Serges
Компилятором vip.exе

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

Добавлено: 27 фев 2004, 18:09
edward_K
insert sf
(nrec,
DESCR,
NODOC,
DDOC,
CORG,
SUMMA)
select
- эт конечно круто , но вот баундсы нужно где т в другом месте определять .
обычно
Interface
create view V
as select
...
bounds byname =
;
еcли вьюшек много то попробуй их использовать как v.tbbyname
:)

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

Добавлено: 01 мар 2004, 11:47
Vitas
:)

Вообще то верно, я даже не заметил, когда читал его мессагу

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

Добавлено: 02 мар 2004, 14:36
Serges
Edward_K, ага, я понял, что баундсы определяются только в конструкции create view. Жаль...