![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу отправить параметр из внешней хранимой процедуры. [D7, MSSQL]
Still Swamp © (2008-06-16 15:21:00)На сервере 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 я делаю.
Igor (2008-06-17 10:48:00) [1]
> declare @LineMenu text
Работать не будет.
Вызывет ошибку:
"Для локальных переменных недопустимы типы данных text, ntext и image."
clickmaker (2008-06-16 18:49:00) [2]вот так что возвращает?
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 ?
Still Swamp (2008-06-16 18:35:00) [3]в описании sp - text
в процедуре - никакого. я принимаю параметр - копирую блок памяти, и возвращаю его.
clickmaker (2008-06-16 17:34:00) [4]> @LineMenu OUT
вот это какого типа?
Still Swamp (2008-06-16 16:58:00) [5]Хм... не понял вопроса.
У самой процедуры в DLL какие типы параметров? Никакие. Я там работаю с указателем и размером данных. Типизацию не использую. Хотя и проверяю для контроля.
Ega23 (2008-06-16 16:41:00) [6]
> Блин - с этим TEXT - какая то постоянная борода.
БЛОБы - они такие, ага...
clickmaker (2008-06-16 16:39:00) [7]> master.dbo.XP_StrTran
а у нее какого типа параметр?
Still Swamp (2008-06-16 16:31:00) [8]Блин - с этим TEXT - какая то постоянная борода.
Ega23 (2008-06-16 16:27:00) [9]А, виноват, неправильно тебя понял.
Still Swamp (2008-06-16 16:13:00) [10]Имеется в виду, вместо
@LineMenu text = NULL,
написать
@LineMenu text = NULL output,
?
Hе катит... это же описание параметров как аутпутных для вызывающей процедуры. В данном случае это не имеет никакого значения.
Ega23 (2008-06-16 16:08:00) [11]
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:01:00) [12]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
clickmaker (2008-06-16 15:53:00) [13]> [4] Still Swamp (16.06.08 15:39)
тогда текст хранимки - в студию
Still Swamp (2008-06-16 15:39:00) [14]Собстно говоря в студии и проверяем. Нет. Не возвращается. Возвращается изначальное значение, те сам параметр не меняется в случае если он описан как TEXT. Условие аутпутности срабатывает нормально.
clickmaker (2008-06-16 15:36:00) [15]> [2] Still Swamp (16.06.08 15:30)
а при выполнении хранимки, скажем, из сиквельной студии, результат возвращается?
Still Swamp (2008-06-16 15:30:00) [16]Ээээ... это экспортируемая функция из Opends60.dll.
clickmaker (2008-06-16 15:28:00) [17]а как сама srv_paramsetoutput выглядит?