德尔福存储过程输出

时间:2014-10-30 15:10:50

标签: mysql delphi stored-procedures output

有人可以帮我从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

1 个答案:

答案 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;