Форум: "Базы";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
ВнизНе могу отправить параметр из внешней хранимой процедуры. Найти похожие ветки
← →
Still Swamp (2008-06-16 15:21) [0]На сервере MSSQL2005 есть хранимая процедура. Один из параметров описан как TEXT Output.
Экспортирую функцию для отправки аутпутных параметров:
function srv_paramsetoutput(srvproc: Pointer;
num: integer;
pbData: Pointer;
cbLen: integer;
fNull: boolean): integer; cdecl; external "Opends60.dll" name "srv_paramsetoutput";
Написал функцию оберку свою:
procedure SetParamString;
var
Typ:Integer;
MaxLength:Integer;
DataSize:Integer;
IsNull:boolean;
begin
srv_paraminfo(ASrvProc, ANum, Typ, MaxLength, DataSize, nil, IsNull);
if (srv_paramstatus(ASrvProc, ANum) and 1) = 1 then begin // Проверка, является ли данный параметр аутпутным
if MaxLength<=Length(AValue) then AValue:=Copy(AValue, 1, MaxLength); // Обрезь до необходимого размера
srv_paramsetoutput(ASrvProc, ANum, PChar(AValue), Length(AValue), False);
end;
end;
После исполнения на SQL приходит NUL. В том случае, если я описываю параметр как varchar, то все благополучно возвращается. Однако у varchar есть ограничение 8тыс байт.
Что не так с типом TEXT я делаю.
← →
clickmaker © (2008-06-16 15:28) [1]а как сама srv_paramsetoutput выглядит?
← →
Still Swamp (2008-06-16 15:30) [2]Ээээ... это экспортируемая функция из Opends60.dll.
← →
clickmaker © (2008-06-16 15:36) [3]> [2] Still Swamp (16.06.08 15:30)
а при выполнении хранимки, скажем, из сиквельной студии, результат возвращается?
← →
Still Swamp (2008-06-16 15:39) [4]Собстно говоря в студии и проверяем. Нет. Не возвращается. Возвращается изначальное значение, те сам параметр не меняется в случае если он описан как TEXT. Условие аутпутности срабатывает нормально.
← →
clickmaker © (2008-06-16 15:53) [5]> [4] Still Swamp (16.06.08 15:39)
тогда текст хранимки - в студию
← →
Still Swamp (2008-06-16 16:01) [6]ALTER PROCEDURE [dbo].[_MenuLSelectSiteFolder]
-- @LineMenu text = NULL,
@LineMenu varchar(255) = NULL,
@MainFrame varchar(255) = NULL,
@MainFrame2 varchar(255) = NULL,
@MainFrame3 varchar(255) = NULL
AS
EXEC master.dbo.XP_StrTran "121", "2", "*111*", @LineMenu OUT, @MainFrame OUT, @MainFrame2 OUT, @MainFrame3 OUT
SELECT @MainFrame, @MainFrame2, @LineMenu, @MainFrame3
← →
Ega23 © (2008-06-16 16:08) [7]
ALTER PROCEDURE [dbo].[_MenuLSelectSiteFolder]
-- @LineMenu text = NULL,
@LineMenu varchar(255) = NULL output,
@MainFrame varchar(255) = NULL output,
@MainFrame2 varchar(255) = NULL output,
@MainFrame3 varchar(255) = NULL output
AS
EXEC master.dbo.XP_StrTran "121", "2", "*111*", @LineMenu OUT, @MainFrame OUT, @MainFrame2 OUT, @MainFrame3 OUT
SELECT @MainFrame, @MainFrame2, @LineMenu, @MainFrame3
← →
Still Swamp (2008-06-16 16:13) [8]Имеется в виду, вместо
@LineMenu text = NULL,
написать
@LineMenu text = NULL output,
?
Hе катит... это же описание параметров как аутпутных для вызывающей процедуры. В данном случае это не имеет никакого значения.
← →
Ega23 © (2008-06-16 16:27) [9]А, виноват, неправильно тебя понял.
← →
Still Swamp (2008-06-16 16:31) [10]Блин - с этим TEXT - какая то постоянная борода.
← →
clickmaker © (2008-06-16 16:39) [11]> master.dbo.XP_StrTran
а у нее какого типа параметр?
← →
Ega23 © (2008-06-16 16:41) [12]
> Блин - с этим TEXT - какая то постоянная борода.
БЛОБы - они такие, ага...
← →
Still Swamp (2008-06-16 16:58) [13]Хм... не понял вопроса.
У самой процедуры в DLL какие типы параметров? Никакие. Я там работаю с указателем и размером данных. Типизацию не использую. Хотя и проверяю для контроля.
← →
clickmaker © (2008-06-16 17:34) [14]> @LineMenu OUT
вот это какого типа?
← →
Still Swamp (2008-06-16 18:35) [15]в описании sp - text
в процедуре - никакого. я принимаю параметр - копирую блок памяти, и возвращаю его.
← →
clickmaker © (2008-06-16 18:49) [16]вот так что возвращает?
declare @LineMenu text
EXEC master.dbo.XP_StrTran "121", "2", "*111*", @LineMenu OUT, @MainFrame OUT, @MainFrame2 OUT, @MainFrame3 OUT
SELECT @MainFrame, @MainFrame2, @LineMenu, @MainFrame3
если я правильно понял, XP_StrTran вызывает процедуру из dll, которая копирует блок памяти в параметр @LineMenu ?
← →
Igor (2008-06-17 10:48) [17]
> declare @LineMenu text
Работать не будет.
Вызывет ошибку:
"Для локальных переменных недопустимы типы данных text, ntext и image."
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c