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

Вниз

Не могу отправить параметр из внешней хранимой процедуры.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
15-1227981351
Genty
2008-11-29 20:55
2009.01.25
Использование библиотек


3-1213782368
tomkat
2008-06-18 13:46
2009.01.25
Запрос из шаблона FR


15-1228102884
Slider007
2008-12-01 06:41
2009.01.25
С днем рождения ! 1 декабря 2008 понедельник


8-1189679198
master_asasin
2007-09-13 14:26
2009.01.25
Форма окна по картинке


15-1228147798
Керк
2008-12-01 19:09
2009.01.25
ipconfig /flushdns