关于delphi调用存储过程的问题

crazy_boom 2018-02-19 06:00:37
Delphi 7
自己写了一个过程 过程中待执行了 存储过程 获取存储过程的返回值


procedure TForm1.btn1Click(Sender: TObject);
var xlh:string ;
begin
getxlh(xlh);
edt1.Text := xlh ; //调用了 getxlh 过程获取的xlh的值是空的
end;

procedure TForm1.getxlh(xulh: String);
begin
StoredProc1.Close;
StoredProc1.Params.Clear;
StoredProc1.StoredProcName := 'P_getxlh';
StoredProc1.Params.CreateParam(ftString,'@a',ptInput);
StoredProc1.Params.CreateParam(ftString,'@b',ptInput);
StoredProc1.Params.CreateParam(ftString,'@c',ptOutput); // 注意这个是 输出参数
StoredProc1.ParamByName('@a').AsString :='1001' ;
StoredProc1.ParamByName('@b').AsString :='B' ;
StoredProc1.Open;

edt1.Text:= StoredProc1.ParamByName('@c').AsString ; //这样来获取 存储过程的输出参数对吗 为什么 输出参数是空的 跟踪到sql语句执行 输出参数是有值的
sss := StoredProc1.fieldbyname('xlh').AsString ; //执行到这里 sss的值为 100001 是对的
xulh:= '111';
end; //跟踪到这里 sss 的值为空 xulh的值也为空了 为什么呢?

1:Delphi 如何获取存储过程的 输出参数的值
2:为什么执行完过程后 参数的值都为空了呢
...全文
1956 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaospring 2018-03-07
  • 打赏
  • 举报
回复
StoredProc1.Close; StoredProc1.Params.Clear; StoredProc1.StoredProcName := 'P_getxlh'; StoredProc1.Params.CreateParam(ftString,'@a',ptInput); StoredProc1.Params.CreateParam(ftString,'@b',ptInput); StoredProc1.Params.CreateParam(ftString,'@c',ptInputOutput); StoredProc1.ParamByName('@a').AsString :='1001' ; StoredProc1.ParamByName('@b').AsString :='B' ; StoredProc1.ParamByName('@c').AsString :='' ; StoredProc1.execproc; StoredProc1.Open; xulh:= StoredProc1.ParamByName('@c').AsString ; 试试!
DelphixpeFan 2018-02-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/yqbaby/article/details/6552362
  • 打赏
  • 举报
回复
procedure TForm1.getxlh(var xulh: String);
lyhoo163 2018-02-21
  • 打赏
  • 举报
回复
检查你存储过程,是否正确。
lyhoo163 2018-02-20
  • 打赏
  • 举报
回复
将 StoredProc1.Open; 换 StoredProc1.ExecProc; 试试,因为返回的是参数时只能用ExecProc,返回的是数据集时用Open,返回的既有参数又有数据集合也用Open。
crazy_boom 2018-02-20
  • 打赏
  • 举报
回复
现在返回值有值了 但是一直行到 End 那一行后 xulh值 变成空了 sss的值也空了 奇怪啊 procedure TForm1.getxlh(xulh: String); begin StoredProc1.Close; StoredProc1.Params.Clear; StoredProc1.StoredProcName := 'P_getxlh'; StoredProc1.Params.CreateParam(ftString,'@a',ptInput); StoredProc1.Params.CreateParam(ftString,'@b',ptInput); StoredProc1.Params.CreateParam(ftString,'@c',ptOutput); // 注意这个是 输出参数 StoredProc1.ParamByName('@a').AsString :='1001' ; StoredProc1.ParamByName('@b').AsString :='B' ; StoredProc1.Open; xulh:= StoredProc1.ParamByName('@c').AsString ; //执行到这有值了 sss:= '111'; end; //跟踪到这里 sss 的值为空 xulh的值也为空了 为什么呢?
crazy_boom 2018-02-20
  • 打赏
  • 举报
回复
edt1.Text:= StoredProc1.ParamByName('@c').AsString ; // 这个参数值仍然是空的
crazy_boom 2018-02-20
  • 打赏
  • 举报
回复
StoredProc1.ExecProc; 使用这个方式 跟踪到的值也是 空的

--跟踪到的Sql 语句
declare @p3 varchar(255)
set @p3=''
exec P_getxlh  @a='1001',@b='lwc000001',@c=@p3 output
select @p3
-- 下面是返回的 参数 有值 
--------------------------------------------------------------------------
(无列名)
10056

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧