有人可以帮我从delphi变量中的存储过程中捕获输出变量吗? 我在这里看了其他问题并且没有成功实施
目前我有一个存储过程:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `return_10`(out x varchar(5))
BEGIN
SET x = 10;
END
如您所见,这是一个非常基本的程序。
在delphi中我想调用这个过程并捕获输出变量并尝试了以下但我觉得它错了。
实现:
var
stored_proc: TADOStoredProc;
(* GETTING A RETURN VALUE FROM A STORED PROCEDURE *)
stored_proc.ProcedureName := 'return_10';
stored_proc.Parameters.Clear;
stored_proc.Parameters.CreateParameter( '@RETURN_VALUE', ftInteger, pdReturnValue, 10, null);
stored_proc.ExecProc;
lbl_connected.Caption := stored_proc.Parameters.ParamByName( '@RETURN_VALUE' ).Value
答案 0 :(得分:1)
作为一般建议,您可以在表单/数据模块上放置TAdoStoredProc,分配属性ProcedureName
并检查参数。
另一种方法可能是为参数添加调试输出。
由于我不能使用MySQL,我只能显示SQL-Server程序的结果:
CREATE PROCEDURE return_10(@x varchar(5) OUT)
AS
BEGIN
Set @x=10;
Return 1;
END
DebugParams显示的参数如下:
@RETURN_VALUE
@x
其中@RETURN_VALUE将是用于状态或ID的值 和@x将通过我们在过程声明中精确命名的过程参数。
您不必添加或创建任何参数,只需在分配Refresh
后致电ProcedureName
并调整可能未设置正确的Direction
。
Procedure DebugParams(ads:TAdoStoredProc);
Var
I:Integer;
sl:TStringList;
begin
sl:=TStringList.Create;
try
for I := 0 to ads.Parameters.Count - 1 do
begin
sl.Add(ads.Parameters[i].Name);
end;
Showmessage(sl.Text);
finally
sl.Free;
end;
end;
procedure TForm7.Button1Click(Sender: TObject);
begin
stored_proc.ProcedureName := 'return_10';
stored_proc.Parameters.Clear;
stored_proc.Parameters.Refresh;
DebugParams(stored_proc);
stored_proc.Parameters.ParamByName('@x').Direction := pdOutput;
stored_proc.ExecProc;
Caption := stored_proc.Parameters.ParamByName('@x').Value;
end;