Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.006 c
1-1206585666
San1712
2008-03-27 05:41
2009.01.25
Как узнать адрес процедуры в потоке из модуля этой же программы?


15-1228074448
this.name
2008-11-30 22:47
2009.01.25
3dsmax: pivot


15-1228038652
Slider007
2008-11-30 12:50
2009.01.25
С днем рождения ! 30 ноября 2008 воскресенье


15-1227679852
RDen
2008-11-26 09:10
2009.01.25
NumLock


1-1207494731
Jolik
2008-04-06 19:12
2009.01.25
Как узнать тип типа класса...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский