| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 852 人关注过本帖
标题:急:在线等答案,有关DELPHI调用存储过程的一个问题
只看楼主 加入收藏
枫余风
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-5-22
收藏
 问题点数:0 回复次数:0 
急:在线等答案,有关DELPHI调用存储过程的一个问题
rem *****************************************************
rem ** 产生进货单号过程
rem ** 功能:根据输入的年份,自动产生进货单编号
rem ** 输入参数:sYear 年份
rem ** 输出参数:returnGoods_in_ordinal 进货单编号
rem ******************************************************
CREATE or REPLACE PROCEDURE proGoods_in_ordinal (sYear varchar2,returnGoods_in_ordinal out varchar2)
is
  x number;                                 /*得到进货单编号后三位流水号*/
  varGoods_in_ordinal1 varchar2(9);         /*某年份的最大进货单编号*/
  varGoods_in_ordinal2 varchar2(9);         /*新的进货单编号*/
begin
  varGoods_in_ordinal1 :='';
  select NVL(max(in_ordinal),'0') into varGoods_in_ordinal1
  from Goods_in
  where in_ordinal like 'I'||sYear ||'%';
  if varGoods_in_ordinal1='0' then          /*没有该年份的进货单,编号从001开始*/
     varGoods_in_ordinal2 := 'I'||sYear || '-001';
  else
    x:= to_number(SUBSTR(varGoods_in_ordinal1,7,3))+1;
    if x<10 then varGoods_in_ordinal2 := 'I'||sYear || '-00' || ltrim(to_char(x));
    elsif x<100 then varGoods_in_ordinal2 := 'I'||sYear || '-0' || ltrim(to_char(x));
    else
        varGoods_in_ordinal2 := 'I'||sYear ||'-' || ltrim(to_char(x));
    end if;
  end if;
  returnGoods_in_ordinal := varGoods_in_ordinal2;
end proGoods_in_ordinal;
/

//自动产生进货单编号
procedure TfrmGoods_in.sbtnCreateGoods_inNoClick(Sender: TObject);
var sYear :string;
begin
  inherited;
  if trim(dbedtin_datetime.Text)='' then
  begin
    application.MessageBox('没有输入进货日期','提示',mb_ok);
    dbedtin_datetime.SetFocus;
    exit;
  end;
  sYear :=copy(trim(dbedtin_datetime.Text),1,4);  //获取进货的年份
  if astpGoods_inNo.Active then astpGoods_inNo.Close;
  astpGoods_inNo.Parameters.Clear;      //将存储过程的参数清空

  //调用存储过程的代码
  astpGoods_inNo.ProcedureName :='PROGOODS_IN_ORDINAL';
  astpGoods_inNo.Parameters.CreateParameter('SYEAR',ftString,pdInput,4,null);
  astpGoods_inNo.Parameters.CreateParameter('RETURNGOODS_IN_ORDINAL',
                                                   ftString,pdOutput,9,null);
  //设置参数
  astpGoods_inNo.Parameters.ParamByName('SYEAR').Value:=sYear;
  //执行存储过程
  try
    astpGoods_inNo.ExecProc;
    if atbGoods_in.State = dsBrowse then atbGoods_in.Edit;
    //atbGoods_in.FieldByName('in_ordinal').Value:=
      //               astpGoods_inNo.Parameters.ParamByName('Param1').Value;
    //过程调用
    atbGoods_in.FieldByName('In_ordinal').Value:=
        astpGoods_inNo.Parameters.ParamByName('RETURNGOODS_IN_ORDINAL').Value;
  except
    application.MessageBox(pchar('产生函数有错,请重试'),'提示',MB_OK);
    exit;
  end;
end;
运行DELPHI和存储过程都没有错,但是我希望显示出I2008-001,可运行后显示I2008-,这是为什么,等高人回答!
搜索更多相关主题的帖子: DELPHI rem ordinal 年份 returnGoods 
2008-05-22 12:47
快速回复:急:在线等答案,有关DELPHI调用存储过程的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014064 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved