![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не возвращается ptOutput параметра TQuery
Hydroliskus © (2007-04-06 14:43:00)Использую BDE при работе с ораклом.
Запускаю функцию, находящуюся в пакете. TStoredProc выдает Access violation, поэтому использую TRxQuery.
TRxQuery отрабатывает запрос, содержащий функцию, т е функция срабатывает, но не записывается результирующее значение в Params
Запрос:
BEGIN
:ID ::= UPDATE_VALUES.ADD_VALUE(....);
END;
Описание функции в пакете:
FUNCTION ADD_VALUE(....) RETURN NUMBER;
Значения полей параметра ID:
DATATYPE = ftInteger
ParamType = ptOutput
Поможите, люди добрые ))
Заранее благодарен.
Val (2007-04-11 10:25:00) [1]да не за что, собственно..
>написал .. соответствующие ..
хранимые просто как обертки пакетных пробовал? что-то мне про права все-же думается.
Hydroliskus (2007-04-10 19:30:00) [2]2Val спасибо за помощь
написал хранимые процедуры, соответствующие логике работы пакетных функций, все нормально отработало.
Причины траблы с пакетами остались загадкой)
Val (2007-04-10 10:51:00) [3]да никаких хитростей. storedprоcname := 'ИМЯ_ПАКЕТА.ИМЯ_ПРОЦЕДУРЫ' и все отличия от вызова обычных процедур.
Hydroliskus (2007-04-09 18:30:00) [4]2Val Подскажи, плз, какой синтаксис для вызова пакетных функций из TStoredProc, может я синтаксис напутал, поэтому и access violation.
Hydroliskus (2007-04-09 18:08:00) [5]
> проблем с правами на пакет нет?
Из PL SQL Developer-e функции запускаются, квери тоже запускает, только вот с возвратом параметров проблема
ANB (2007-04-09 13:18:00) [6]
> Получается, что единственно возможный способ работы с такими
> функциями - TStoredProc ?
Не единственный, но самый безгеморройный.
А также, ИМХО - через BDE с ораклом работать жутко неудобно и возможны глюки.
Val (2007-04-07 15:18:00) [7]проблем с правами на пакет нет?
Hydroliskus (2007-04-07 01:11:00) [8]>компонент проинициализирован? базу данных указал? параметры передал? препарировал?
Все сделал. Когда пытаюсь функцию назначить, выдает список процедур, но не видит ту, которая мне нужна
Затем просто записал в этом поле имя функции. Когда попытался задать параметры, то выскочил Access violation (все происходит на этапе дизайна)
Может пакетные функции по-другому передаются ?...
>Если в функции выболняется изменение данных, то из нее сделать SELECT
Получается, что единственно возможный способ работы с такими функциями - TStoredProc ?
Val (2007-04-06 22:51:00) [9]компонент проинициализирован? базу данных указал? параметры передал? препарировал?
Hydroliskus (2007-04-06 19:55:00) [10]>spResult - это компонент брошенный на форму?
да, TStoredProc* spResult ;
Val (2007-04-06 19:25:00) [11]spResult - это компонент брошенный на форму?
Hydroliskus (2007-04-06 19:04:00) [12]не правильно написал, код такой:
spResult->StoredProcName = "UPDATE_VALUES.ADD_VALUE";
spResult->ExecProc(); //Access Violation
Hydroliskus (2007-04-06 18:58:00) [13]>показывай код со 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 - имя функции
Val (2007-04-06 18:50:00) [14]>[8] Desdechado © (06.04.07 18:14)
согласен.
Desdechado (2007-04-06 18:14:00) [15]Val © (06.04.07 17:51) [6]
Если в функции выболняется изменение данных, то из нее сделать SELECT нельзя без использования AUTONOMOUS_TRANSACTION, но оно чревато...
Да и результат будет не в Params[0], а в Fields[0]
Val (2007-04-06 18:10:00) [16]по поводу 2. - параметр result не пройдет. мысли разбежались, он к первому пункту.
Val (2007-04-06 17:51:00) [17]1. показывай код со stored proc. у меня не выдает access violation.
2. если используешь квери - запрос из dual, как уже говорили. после выполнения id := Q.Params[0].AsInteger или Q.ParamByName('Result').AsInteger
Hydroliskus (2007-04-06 15:58:00) [18]А как TStoredProc вызывает пакетную функцию ?
->StoredProcName = "<Имя пакета>.<Имя функции>" ?
>А чтобы параметры вертались из квери, желательно поискать свойство >типа ReturnParam.
У параметра есть свойство ParamType. Насколько я понял, если выводится результирующее значение, то ParamType = ptResult. Не помогает (((
>И нафига на это пакетную функцию? Фраза RETURNING в INSERT-запросе >решает эту "проблему" на раз
Дополняю чужую прогу. В базе функции пакетные. Приходится с ними возиться).
Sergey13 (2007-04-06 15:32:00) [19]> там ID генерится сиквенсом и нужно его получить
И нафига на это пакетную функцию? Фраза RETURNING в INSERT-запросе решает эту "проблему" на раз.
ANB (2007-04-06 15:31:00) [20]
> TStoredProc выдает Access violation
С чего это вдруг ?
А чтобы параметры вертались из квери, желательно поискать свойство типа ReturnParam.
С компонентами типа TStoredProc такие проблемы почти не возникают.