DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: s_monkeys
今日帖子: 25
在线用户: 14
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zzcaism (LionKing) ★☆☆☆☆ -
普通会员
2004/5/14 9:12:08
标题:
这样的问题,不应该这么困难呀,可我发贴20多天了,没能有个令人满意的答复 浏览:1268
加入我的收藏
楼主: 我在TSQLStoredProc中调用一个升工资的存储过程。
如下:
CREATE PROCEDURE dbo.RaiseSalary    
  @EID nvarchar(10) ='a00001',
  @RPercent  float=0.5
AS
begin
  print @EID
  Update BaseData
  Set 
     YLPrice =YLPrice*(1+@RPercent)
  Where YID=@EID
  
end
GO

我在delphi的代码如下,没有参数了很正常,有参数就马上不行了。
主要表现为参数加不上。出现错误如下:
list index out of bounds(0);

以下是我的代码:
===========================================
procedure TForm1.Button1Click(Sender: TObject);
//var
  //P1, P2: TParam;
begin
   with Datamodule2.SQLStoredProc1 do begin
    params.Clear;
    StoredProcName := 'RaiseSalary';

    params.Add;
    params[0].Name:='eid';
    parambyname('eid').AsString:='a001';
    //params.EndUpdate;

    execproc;
    {
    P1 := TParam.Create(Params, ptInput);
    P2 := TParam.Create(Params, ptInput);
    try
      Params[0].Name := '@EID';
      Params[1].Name := '@RPercent ';
      //ParamByname('EID').AsString :='A00001';
      Params[0].AsString:='A00001';
      ExecProc;
    finally
      P1.Free;
      P2.Free;
    end; }
  end;


end;

==========================
我试过好多种方法,也包括手工增加,都不行。

代码上屏闭部份都是我试过的方法

----------------------------------------------
-
作者:
男 zzcaism (LionKing) ★☆☆☆☆ -
普通会员
2004/5/14 10:44:27
1楼: up
----------------------------------------------
-
作者:
男 zzcaism (LionKing) ★☆☆☆☆ -
普通会员
2004/5/14 11:18:18
2楼: 看看呀
----------------------------------------------
-
作者:
男 tangren (tangren) ★☆☆☆☆ -
盒子活跃会员
2004/5/14 12:58:45
3楼: 给个电话给我,我手把手给你指导,OK?
(上次我发贴经过我测试过,绝对可以)
----------------------------------------------
-
作者:
男 kwbin (rainey) ★☆☆☆☆ -
盒子活跃会员
2004/5/14 13:11:53
4楼: 你的存储过程好像有问题吧
看看这个
Create procedure GetName  

  @uid nvarchar(1), 

  @usernam nvarchar(10)='' output 

  AS 

  set @username='hongchao' 

  GO 
详细请参考http://www.delphiun.com
《SQL Server存储过程编程经验技巧》
----------------------------------------------
我们的技术来自于大家的齐心合力!不要吝啬你的知识!
作者:
男 zzcaism (LionKing) ★☆☆☆☆ -
普通会员
2004/5/14 13:24:54
5楼: 回 tangren :
我的电话:0596-2681610
让我打给您吧,让您破费怎么好意思。
----------------------------------------------
-
作者:
男 zzcaism (LionKing) ★☆☆☆☆ -
普通会员
2004/5/14 13:28:38
6楼: 再发上次回贴
////////////////////
谢谢tanger兄弟的热心帮助,我的问题还是没能最终圆满的解决。
我引用了tanger兄弟的代码,可是还一样的不行。
如果tanger兄弟有看贴的话,能不能再帮我查一下。
with Datamodule2.sqlstoreProc1 do
begin
   StoredProcName := 'RaiseSalary';
   params.Clear;
   p1:=TParam.Create(nil);
   p2:=Tparam.Create(nil);
   try
      p1.Name:='@EID';
      p1.DataType:=ftString;
      p1.ParamType:=ptInput;
      Params.AddParam(p1);

      p2.Name:='@RPercent';
      p2.DataType:=ftFloat;
      p2.ParamType:=ptInput;
      params.AddParam(p2);

      paramByname('@EID').AsString:='a00001';
      paramByname('@RPercent').AsFloat:=0.5;
      //应该不是参数没加上去,否则paramByname('@eid')就会出'找不到'@eid'的错误了。
      Execproc;
    finally
      p1.Free;
      p2.Free;
    end; 
    

//让您破费打电话,太不好意思了,我打给您吧。
我的电话:0596-2681610  QQ:25559749

----------------------------------------------
-
作者:
男 zzcaism (LionKing) ★☆☆☆☆ -
普通会员
2004/5/14 14:11:09
7楼: To  tangren :
我的问题终于解决了,我把StoredProcName := 'RaiseSalary'
改为StoredProcName := 'dbo.RaiseSalary'
就OK了。
太谢谢您了。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS