起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 248|回复: 17

【搞定】关于储存过程**

[复制链接]
发表于 2007-6-12 15:38:40 | 显示全部楼层 |阅读模式
这样的存储过程,在平台中调用时出如下错误,
declare @fupDiscount decimal(18,2) --上月折扣余额
declare @fDiscount decimal(18,2) --本月折扣金额
declare @fDiscount_db decimal(18,2) --本月调拨
declare @fDiscount_us decimal(18,2)  --本月报销
declare @fgsname varchar(20)

select @fgsname=FDISPLAYNAME from opendatasource('sqloledb','data source=192.168.0.250;user id=saassword=perfect').perfect_system.dbo.TDEPT where EBH = @fgsno
--select name from newshop..fgs where fgsno=@fgsno
--取上月份
select @month=max(fcmonth)  from Bservice_flag
--取上月折扣余额
select @fupDiscount=isnull(fDiscount,0) from Bservice_yj where fcmonth=@month and fgsno=@fgsno and fwgsbh=@fwgsbh
---取本月折扣金额
select @fDiscount=isnull(sum(fcash),0) from Bservice_zk where fcmonth=@fcmonth  and fgsno=@fgsno and fwgsbh=@fwgsbh
---取本月调拨
select @fDiscount_db=isnull(sum(fcash),0) from Bservice_db where fcmonth=@fcmonth  and fgsno=@fgsno and fwgsbh=@fwgsbh
---取本月报销

select  @fDiscount_us=isnull(sum(b.JE),0) from opendatasource('sqloledb','data source=192.168.0.250;user id=saassword=perfect').ywbx.dbo.FWGSBXZB a, opendatasource('sqloledb','data source=192.168.0.250;user id=saassword=perfect').ywbx.dbo.FWGSMXB b where a.SQBH = b.SQBH and a.LZBZ = 1 and a.BXYF = @fcmonth and  b.FWGSBH=@fwgsbh  and a.SQBM =@fgsname
--返回可报销折扣(动态计算:上月折扣余额+本月折扣金额+本月调拨-本月报销)
select @discount=@fupDiscount+@fDiscount+@fDiscount_db-@fDiscount_us
GO

2.jpg

126.11 KB, 下载次数: 134

回复

使用道具 举报

 楼主| 发表于 2007-6-12 16:12:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 16:20:07 | 显示全部楼层
比较急,请求帮助,关于存储过程,平台老是会遇到这样或者那样的问题,希望能够解决
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 16:39:33 | 显示全部楼层
怎么没有人呢?我的数据库是SQL Server
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 17:39:13 | 显示全部楼层
ding
回复 支持 反对

使用道具 举报

发表于 2007-6-12 17:48:49 | 显示全部楼层
看看你原来的存储过程是怎么写的
CREATE PROCEDURE an_PcnoRead @pcmon varchar(22), @pctype VARCHAR(22),@pcno varchar(30)  output AS
declare @haveone  int
declare @pccount  int
declare @addchar varchar(5)
select @addchar='00000'
select @haveone = (select count(*) from b_pcmaster where  pcmon=@pcmon and pctype=@pctype)
   if  @haveone=0
  begin
      insert B_pcmaster(pcmon,pctype,pccount) values(@pcmon,@pctype,0)
      select @pcno=@pcmon+'00001'
  end
  else
  begin
    select  @pccount=(select pccount  from b_pcmaster where  pcmon=@pcmon and pctype=@pctype )   
    select  @pccount=@pccount+1
    select @pcno=@pcmon+right(@addchar+ltrim(str(@pccount)),5)
  end
select @pcno
GO
只有象这样返回数据集的,才可以用存储过程数据集调用
否则,1楼的存储过程应该用TStrocProc调用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 21:20:55 | 显示全部楼层

用TStoredProc还是有问题

lStoredProc := TStoredProc.Create(nil);
      with lStoredProc do
      try
        ConnectionString := 'DatabaseURL=Biz:RCSWCLFWGSSJK.Database';
        StoredProcName := 'PA_BSERVICE_DISCOUNT';
        //Params.Clear;
        //Params.CreateParam(TFieldType.ftString, '@fcmonth', TParamType.ptInput);
        //Params.CreateParam(TFieldType.ftString, '@fgsno', TParamType.ptInput);
        //Params.CreateParam(TFieldType.ftString, '@fwgsbh', TParamType.ptInput);
        //Params.CreateParam(TFieldType.ftFloat, '@discount', TParamType.ptOutput);
        Params.ParamByName('@fcmonth').AsString:= DataSetBroker1.DataSet.FieldByName('BXYF').AsString ;
        Params.ParamByName('@fgsno').AsString:=bmbh;
        Params.ParamByName('@fwgsbh').AsString:=DataSetBroker2.DataSet.FieldByName('FWGSBH').AsString ;
        Execute;
        ed:=Params.ParamByName('@discount').AsFloat;
      finally
        Free;
      end;

当运行到
Params.ParamByName('@fcmonth').AsString:= DataSetBroker1.DataSet.FieldByName('BXYF').AsString ;
出错如附件

3.jpg

129.06 KB, 下载次数: 123

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 21:21:55 | 显示全部楼层
然后参照BBS上的帖子:http://bbs.justep.com/forum.php? ... ghlight=TStoredProc

修改以后没有任何作用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 21:24:39 | 显示全部楼层

如果参照BBS上的帖子,这样修改代码,

lStoredProc := TStoredProc.Create(nil);
      with lStoredProc do
      try
        ConnectionString := 'DatabaseURL=Biz:RCSWCLFWGSSJK.Database';
        StoredProcName := 'PA_BSERVICE_DISCOUNT';
        Params.Clear;
        Params.CreateParam(TFieldType.ftString, '@fcmonth', TParamType.ptInput);
        Params.CreateParam(TFieldType.ftString, '@fgsno', TParamType.ptInput);
        Params.CreateParam(TFieldType.ftString, '@fwgsbh', TParamType.ptInput);
        Params.CreateParam(TFieldType.ftFloat, '@discount', TParamType.ptOutput);
        Params.ParamByName('@fcmonth').AsString:= DataSetBroker1.DataSet.FieldByName('BXYF').AsString ;
        Params.ParamByName('@fgsno').AsString:=bmbh;
        Params.ParamByName('@fwgsbh').AsString:=DataSetBroker2.DataSet.FieldByName('FWGSBH').AsString ;
        Execute;
        ed:=Params.ParamByName('@discount').AsFloat;
      finally
        Free;
      end;

还是报错

4.jpg

135.26 KB, 下载次数: 119

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-12 21:25:33 | 显示全部楼层
这个到底应该怎样写?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-11 23:55 , Processed in 0.042518 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表