当前位置:主页>销售管理软件> 列表

存储过程的输出函数

财务软件版1楼: CREATE PROCEDURE [dbo].[prtext]
@inFunction varchar(50)
AS
declare @outFunction varchar(50)
execute prtext @outFunction output
if @inFunction=''1''
begin
select @outFunction=''是的,我输入了1''
end
else
begin
select @outFunction=''我错了''
end
GO
我在delphi中是这样写的
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOSP.Close;
ADOSP.Parameters.ParamByName(''@inFunction'').value :=Edit1.Text;
ADOSP.Open;
Edit2.Text:=ADOSP.Parameters.ParamByName(''@outFunction'').Value ;
end;
执行不了,请教各位了。

2楼: 不会吧,一个人也没有。 如进销存报表格式

3楼: 存储过程的参数和ADOquery的参数不是一回事

4楼: to devillyd
那我如何解决。

5楼: create procedure myproc @inparam int,@outparam int output as
(存储过程内容)
然后再在SQLquery中写入下面程序
exec myproc :inparam,:outparam
outselect @outparam
讲的不是很详细,不过你自己应该可以体会。
试试看吧。我求存储过程的输出参数都是这样写的,绝对没问题。

6楼: 输出 :
print @outparam;

财务软件版7楼: 一、
with ADOSP do
begin
ProcedureName := ''sp_spaceused''; // 设置存储过程名
Close; // 关闭以前的数据集
Parameters.Clear; // 清空以前的参数
Parameters.CreateParameter(''@参数名'',ftString,pdInput,10,''默认值''); //生成新的参数
Open;// 或者ExecProc,不返回数据集
end;
如果还是出错,就是
1.存储过程错,在查询分析器中先调通;
2.存储过程名设置错,
3.CreateParameter里设置参数对应关系错了,例如数据类型等.

二、例子
with Proc2 do
begin
close;
procedurename := ''testdelphi'';
Parameters.Clear;
Parameters.CreateParameter(''@sIn'', ftString, pdInput, 6, ''我来了''); //参数名不需和存储过程定义的参数名一样,按顺序即可
Parameters.CreateParameter(''@sOut'', ftstring, pdInputOutput, 50, '''');
Parameters.ParamByName(''@sIn'').Value := ''我来了'';


ExecProc;
s:=Parameters.ParamValues[''@sOut''];
ShowMessage(s);
end;

存储过程:
create procedure testdelphi
@sIn char (6),
@sOut char (50) output
as
set @sOut=@sIn+'',咋来的咋走!''

go

三、另外,你的存储过程返回值应当这样用:
Edit2.Text:=ADOSP.Fields[0].AsString;

8楼: 存储过程是错的,根本没有定义输入输出,yzxcsw的方法是正确的,或者你干脆把存储过程做为一条SQL语句来做,用ADOQUERY来运行,返回的数据集就是你要的东西了

9楼: CREATE PROCEDURE returnsrt( @inFunction varchar(1))
returns @outFunction varchar(50)
AS
declare @outFunction varchar(50)
execute prtext @outFunction output
if @inFunction=''1''
begin
select @outFunction=''是的,我输入了1''
end
else
begin
select @outFunction=''我错了''
end

return @outFunction
GO
你的过程写错了。。试试这个。

10楼: 使用sdac就不需要这么麻烦

存储过程:
/****** Object: Stored Procedure dbo.YH_LSH Script Date: 2005-09-21 09:06:19 ******/



CREATE PROCEDURE dbo.YH_LSH
@LSH NVARCHAR(10) OUTPUT
AS
BEGIN
DECLARE @MAX_BH INT
SET @MAX_BH = (SELECT MAX(LSH) FROM LSH)
IF @MAX_BH IS NULL
BEGIN
SET @LSH=''0000000001''
END
ELSE
BEGIN
SET @LSH =REPLICATE(''0'',10-LEN(RTRIM(@MAX_BH+1)))+CAST(@MAX_BH+1 AS CHAR(10))
END
INSERT INTO LSH (LSH) VALUES (@LSH)

END



GO
调用:
LSH_Proc.Close;
LSH_Proc.StoredProcName := ''YH_LSH'';
LSH_Proc.Execute;
LSH := LSH_Proc.ParamByName(''LSH'').AsString;

一点问题也没有,所以使用一个合适的控件可以加快开发速度。

11楼: 多人接受答案了。



上一篇:SQL我认为不简单的一个问题   下一篇:没有了