Использование польз.фукнции в create view интерфейса

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Использование польз.фукнции в create view интерфейса

Сообщение beatlov »

Существует ли возможность использования польз. функций в create view интерфейса?
Например:
.create view AS
SELECT katmc.*,tmpgrn.*
WHERE
((
1070==tmpgrn.wlist and
tmpgrn.crec1==katmc.nrec and
user_function(katmc.nrec)=1
))
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

create view AS
SELECT katmc.*,tmpgrn.*
WHERE
((
1070==tmpgrn.wlist and
tmpgrn.crec1==katmc.nrec and ))
and user_function(katmc.nrec)=1 ;
beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Сообщение beatlov »

И в данном случае функция не будет работать - ВИП будет ругаться на незнакомую функцию.
Пробовалось объявление функции в .fun , через .function - однако и этот вариант не подошел (хотя работает в файлах frm)
Gera
топ-софт
Сообщения: 97
Зарегистрирован: Пн, 24/09/2007 17:53
Имя Фамилия: Юрий Герман
Откуда: ТопСофт
Контактная информация:

Сообщение Gera »

Пример из документации:
Пример 1. Опережающее описание функции.

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

function b (i : integer) : integer; forward;
function a : integer;
{
  a := b (1);
}
function b (i : integer) : integer;
{
  b := i + i;
}
Gera
топ-софт
Сообщения: 97
Зарегистрирован: Пн, 24/09/2007 17:53
Имя Фамилия: Юрий Герман
Откуда: ТопСофт
Контактная информация:

Сообщение Gera »

Также необходимо помнить, что использование пользовательской функции внутри where приведет к обязательной обработке условия на клиенте.
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

Из документации :
"
Описание функции и процедуры

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

В отличие от процедуры функция возвращает значение. Имя функции может входить в выражение как операнд.

Функции и процедуры должны быть описаны до их использования, в том числе до их использования в других функциях и процедурах
"

Interface qwerty;

Function getsymf(p1 :string): char;
{
getsymf :=substr(p1,1,1)
}

create view
from katmc
where getsymf(name)='А';


HandleEvent
CmInit :{
_loop katmc
logstrtofile('c:\debug\katmcc.txt',katmc.name);
}
end;
end.
beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Сообщение beatlov »

toЮрий: Спасибо за ответ - помогло!!
toДенис: Денис, Спасибо за ответ - но данный вариант работает только в том случае, если в функции нет запросов.. если в функции есть запрос , и мы ее объявляем до "root" view - вываливается ошибка:(
Ответить