DELPHI存储过程调用

网上对该问题的帖子很多,但是经常不是很全面,笔者在使用时也遇到了很多实际问题,比如参数不存在啊、类型没有引用啊等等。下面我尽量细致地来通过例子实现一下,如果还有不正确的地方,希望得到高手指点,有兴趣的可以和我一同探讨。zyf0808@yeah.net。QQ:65127444 
首先,我们使用一种简单的方式,即通过控件的方式来定义存储过程和数据源。
新建一个单元,命名为:DataMConn,在加入一个ADO单元下的ADOStoredProc,这里命名为ADOSPTempAbove ,再加入Data Access单元下的一个DataSource,这里命名为DataSourceAbove,设置DataSourceAbove的DataSet属性为ADOSPTempAbove,当然这个属性也可以在程序中指定。
下面,可以在另一个单元中添加一个DataGrid,这里的命名为dgAbove。下面的代码加了详细注释。
With DataMConn.ADOSPTempAbove do
    begin
      ProcedureName := 'GetAbove';   //指定存储过程名称
      Parameters.Clear;              //清除原有参数
      //以下创建了两个新的参数,关于如何传递表名做为参数请参我在 数据库 分类的高级应用中写的文章。
      Parameters.CreateParameter( '@tableName',ftString,pdinput,20,0);
      Parameters.CreateParameter( '@strDate',ftString,pdinput,20,0);
      //以下为参数赋值
      Parameters.ParamByName( '@tableName').Value := tempTableName;
      Parameters.ParamByName( '@strDate').Value := strDate;
      try
        Open;   //返回结果集用open,否则用EexcProc;
      except
       begin
         ShowMessage('打开表错误');
         Exit;
       end;
      end;
    //如果没有在控件属性中设置DataSourceAbove的DataSet属性,可以在这里设置:
    //DataSourceAbove.DatSet := DataMConn.ADOSPTempAbove 
    dgAbove.DataSource := DataMConn.DataSourceAbove;
  end;
///
创建方法和连接都很简单。
StorPro:=TADOStoredProc.Create(nil);
 
然后定义存储过程的名字和输入参数:
StorPro.ProcedureName:=ProName;
StorPro.Parameters.clear;
StorPro.Close;
StorPro.Parameters.CreateParameter('as_gh', ftString, pdInput , 10, NULL);
StorPro.Parameters.CreateParameter('as_in', ftString, pdInput , 100, NULL);
StorPro.Parameters.CreateParameter('as_out', ftString, pdOutput , 255, NULL);
大家可能看到函数CreateParameter中的第3个参数,pdInput 就是用来定义此参数是输入参数函数输出参数。具体的参数函数是:存储过程参数名称、类型、输入输出参数类型、长度还有就是最后一个参数Delphi帮助中说是Value: OleVariant,不过我没有用过。一般我赋值为NULL。
上面的过程是定义这个存储过程的参数。在调用的时候自然需要给参数赋值。
赋值过程为(其中WorkID和DataID是事先定义好的两个变量):
StorPro.Parameters[0].value :=WorkID;
StorPro.Parameters[1].value :=DataID;
赋值完成后运行此存储过程:
StorPro.prepared:=true;
StorPro.ExecProc;
好了存储过程调用以后,我们希望得到这次存储过程返回的参数'as_out'的值。
fxh7622:=StorPro.Parameters.parambyname('as_out').Value;
这个时候存储过程返回的值就保存在了fxh7622里面。
其实获得存储过程的返回值比较简单,希望对大家有帮助。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值