Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.08;
Скачать: CL | DM;

Вниз

Не возвращается ptOutput параметра TQuery   Найти похожие ветки 

 
Hydroliskus   (2007-04-06 14:43) [0]

Использую BDE при работе с ораклом.
Запускаю функцию, находящуюся в пакете. TStoredProc выдает Access violation, поэтому использую TRxQuery.
TRxQuery отрабатывает запрос, содержащий функцию, т е функция срабатывает, но не записывается результирующее значение в Params

Запрос:

BEGIN
 :ID ::= UPDATE_VALUES.ADD_VALUE(....);
END;

Описание функции в пакете:

FUNCTION ADD_VALUE(....) RETURN NUMBER;

Значения полей параметра ID:
DATATYPE = ftInteger
ParamType = ptOutput

Поможите, люди добрые ))

Заранее благодарен.


 
Desdechado ©   (2007-04-06 15:17) [1]

> RETURN NUMBER;
> DATATYPE = ftInteger
Что-то мне говорит, что такая комбинация неживая.
NUMBER - это, скорее, Double.

Да и вызывать функцию проще так:
SELECT UPDATE_VALUES.ADD_VALUE(....) FROM Dual
Тогда никаких параметров на выход не надо, только входные.


 
Hydroliskus   (2007-04-06 15:27) [2]

>Да и вызывать функцию проще так:
>SELECT UPDATE_VALUES.ADD_VALUE(....) FROM Dual
>Тогда никаких параметров на выход не надо, только входные.

там ID генерится сиквенсом и нужно его получить


 
ANB ©   (2007-04-06 15:31) [3]


> TStoredProc выдает Access violation

С чего это вдруг ?

А чтобы параметры вертались из квери, желательно поискать свойство типа ReturnParam.

С компонентами типа TStoredProc такие проблемы почти не возникают.


 
Sergey13 ©   (2007-04-06 15:32) [4]

> там ID генерится сиквенсом и нужно его получить

И нафига на это пакетную функцию? Фраза RETURNING в INSERT-запросе решает эту "проблему" на раз.


 
Hydroliskus   (2007-04-06 15:58) [5]

А как TStoredProc вызывает пакетную функцию ?
->StoredProcName = "<Имя пакета>.<Имя функции>" ?

>А чтобы параметры вертались из квери, желательно поискать свойство >типа ReturnParam.

У параметра есть свойство ParamType. Насколько я понял, если выводится результирующее значение, то ParamType = ptResult. Не помогает (((

>И нафига на это пакетную функцию? Фраза RETURNING в INSERT-запросе >решает эту "проблему" на раз

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


 
Val ©   (2007-04-06 17:51) [6]

1. показывай код со stored proc. у меня не выдает access violation.
2. если используешь квери - запрос из dual, как уже говорили. после выполнения id := Q.Params[0].AsInteger или Q.ParamByName("Result").AsInteger


 
Val ©   (2007-04-06 18:10) [7]

по поводу 2. - параметр result не пройдет. мысли разбежались, он к первому пункту.


 
Desdechado ©   (2007-04-06 18:14) [8]

Val ©   (06.04.07 17:51) [6]
Если в функции выболняется изменение данных, то из нее сделать SELECT нельзя без использования AUTONOMOUS_TRANSACTION, но оно чревато...
Да и результат будет не в Params[0], а в Fields[0]


 
Val ©   (2007-04-06 18:50) [9]

>[8] Desdechado ©   (06.04.07 18:14)
согласен.


 
Hydroliskus   (2007-04-06 18:58) [10]

>показывай код со stored proc. у меня не выдает access violation.

spResult->StoredProcName = "UPDATE_VALUES.ADD_VALUE(....) ";
spResult->ExecProc(); //Access Violation

Не обратил внимания, что на этапе дизайна при присвоении полю StoredProcName величины UPDATE_VALUES.ADD_VALUE и установки Active в True, происходит тоже Access Violation

Получаетя, что storedproc не видит этой функции... Может я её неправильно прописал в StoredProcName ?
UPDATE_VALUES - имя пакета
ADD_VALUE - имя функции


 
Hydroliskus   (2007-04-06 19:04) [11]

не правильно написал, код такой:
spResult->StoredProcName = "UPDATE_VALUES.ADD_VALUE";
spResult->ExecProc(); //Access Violation


 
Val ©   (2007-04-06 19:25) [12]

spResult - это компонент брошенный на форму?


 
Hydroliskus   (2007-04-06 19:55) [13]

>spResult - это компонент брошенный на форму?

да, TStoredProc* spResult ;


 
Val ©   (2007-04-06 22:51) [14]

компонент проинициализирован? базу данных указал? параметры передал? препарировал?


 
Hydroliskus   (2007-04-07 01:11) [15]

>компонент проинициализирован? базу данных указал? параметры передал? препарировал?

Все сделал. Когда пытаюсь функцию назначить, выдает список процедур, но не видит ту, которая мне нужна

Затем просто записал в этом поле имя функции. Когда попытался задать параметры, то выскочил Access violation (все происходит на этапе дизайна)

Может пакетные функции по-другому передаются ?...

>Если в функции выболняется изменение данных, то из нее сделать SELECT
Получается, что единственно возможный способ работы с такими функциями - TStoredProc ?


 
Val ©   (2007-04-07 15:18) [16]

проблем с правами на пакет нет?


 
ANB ©   (2007-04-09 13:18) [17]


> Получается, что единственно возможный способ работы с такими
> функциями - TStoredProc ?

Не единственный, но самый безгеморройный.
А также, ИМХО - через BDE с ораклом работать жутко неудобно и возможны глюки.


 
Hydroliskus   (2007-04-09 18:08) [18]


> проблем с правами на пакет нет?


Из PL SQL Developer-e функции запускаются, квери тоже запускает, только вот с возвратом параметров проблема


 
Hydroliskus   (2007-04-09 18:30) [19]

2Val Подскажи, плз, какой синтаксис для вызова пакетных функций из TStoredProc, может я синтаксис напутал, поэтому и access violation.


 
Val ©   (2007-04-10 10:51) [20]

да никаких хитростей. storedprоcname := "ИМЯ_ПАКЕТА.ИМЯ_ПРОЦЕДУРЫ" и все отличия от вызова обычных процедур.


 
Hydroliskus   (2007-04-10 19:30) [21]

2Val спасибо за помощь

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


 
Val ©   (2007-04-11 10:25) [22]

да не за что, собственно..
>написал .. соответствующие ..
хранимые просто как обертки пакетных пробовал? что-то мне про права все-же думается.



Страницы: 1 вся ветка

Текущий архив: 2007.07.08;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
1-1178545729
TStas
2007-05-07 17:48
2007.07.08
Как отправить по почте текстовый файл?


15-1181056226
@!!ex_
2007-06-05 19:10
2007.07.08
Реально ли вернуть?


5-1155637901
NiGGa
2006-08-15 14:31
2007.07.08
Двойной грид.


2-1180973368
Bora_ru
2007-06-04 20:09
2007.07.08
Копирование папок


15-1181408080
vch
2007-06-09 20:54
2007.07.08
Dscaler --> AspectRatio --> кнопками