![]() |
![]() |
![]() |
|
ХП позвращает нул в параметре | ☑ | ||
---|---|---|---|---|
0
vde69
03.04.17
✎
13:23
|
создал хранимку на скуле
ALTER PROCEDURE [dbo].[Get_CRC_Import_Document] @IDSession char(200), -- Сеансовый ключ @KeyHost char(200), -- Имя узла в который отправляли данные @KeyObject char(200), -- Идентификатор объекта @KeyOk int OUTPUT -- Возвращает 0 если все хорошо и -1 если сеансовый ключ не подошел WITH EXECUTE AS CALLER AS BEGIN SELECT @KeyOk=6; END из 1с вызываю Command = Новый COMОбъект("ADODB.Command"); Command.CommandTimeout = 100; Command.ActiveConnection = ПараметрыСеансаОбмена.COMОбъектSQL; // Получаем CRC ранее отправленого объекта Command.CommandType = 4; Command.Parameters.Append(Command.CreateParameter("IDSession", 129, 1, 200, ПараметрыСеансаОбмена.СеансовыйКлюч)); Command.Parameters.Append(Command.CreateParameter("KeyHost", 129, 1, 200, СокрЛП(Объект.Код))); Command.Parameters.Append(Command.CreateParameter("KeyObject", 129, 1, 200, "e1cib/data/Документ.ПриходныйКассовыйОрдер?ref=aa29001e67078ba411e7025ea8da7e69")); Command.Parameters.Append(Command.CreateParameter("KeyOk", 3, 2)); стрЗапрос = "Get_CRC_Import_Document"; Command.CommandText = стрЗапрос; RecordSet = Command.Execute(стрЗапрос); а=Command.Parameters("KeyOk").Value; вроде все должно работать, а "а" всегда null. где напутал? |
|||
1
youalex
03.04.17
✎
13:33
|
Параметры правильно указаны?
вот отсюда https://msdn.microsoft.com/ru-ru/library/ms677209(v=vs.85).aspx Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value) Direction = 3 |
|||
2
vde69
03.04.17
✎
13:42
|
Direction = 3 - не работает, ошибка вызова ХП
= 2 или 4 ХП работает, но возвращает NULL хотя аналогичный вызов с текстовым параметром работает (другая ХП) |
|||
3
vde69
03.04.17
✎
14:39
|
прочитал
>>>Если уж вы открыли рекордсет, возвращаемый из процедуры, то придется сначала его закрыть. Только после этого станут доступны output/return параметры хм.... буду думать... |
|||
4
youalex
03.04.17
✎
19:28
|
вообще странно, у меня - этот код работает, в смысле Command.Parameters("KeyOk").Value - не NULL
|
|||
5
vde69
04.04.17
✎
08:59
|
дело в следующей строчке, вот так НЕ работает
RecordSet = Command.Execute(стрЗапрос); а вот так Работает Command.Execute(стрЗапрос); для себя перешел на генерацию ошибок, мне этот вариант больше подходит ALTER PROCEDURE [dbo].[Get_CRC_Import_Object] @IDSession char(200), -- Сеансовый ключ @KeyHost char(200), -- Имя узла в который отправляли данные @KeyObject char(200) -- Идентификатор объекта WITH EXECUTE AS CALLER AS BEGIN DECLARE @IDSource int SELECT @IDSource = ID_Source FROM CurrentSession WHERE (CurrentSession.IDSesion = @IDSession AND CurrentSession.MSid = @@SPID) IF @IDSource IS NULL RAISERROR ('ERROR ID SESSION', 18, 1); SELECT Doc1c.CRC_Out, Doc1c.Processed, Doc1c.DataProcessed FROM Doc1c WHERE (Doc1c.ID_Source = @IDSource AND Doc1c.KeyDocSource = @KeyObject) END |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |