起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 774|回复: 7

【搞定】自动编号的实现**

[复制链接]
发表于 2007-5-22 14:06:30 | 显示全部楼层 |阅读模式
现在有个字段需要自动编号,如下的形式:

yyyy——mm——xxx

yyyy:年份,mm:月份,xxx:从001开始自动编号

月份变化的时候,清空后面的序号还从001开始(比如5月最后的一个记录xxx为300,6月的第一个编号还是yyyy-mm-001)

这个应该怎么实现,谢谢
回复

使用道具 举报

发表于 2007-5-22 14:42:08 | 显示全部楼层
function TMainForm.GetIncNUm: string;
const
  cZeroLeng = '000';
var
  lDateStr, lTmpStr: string;
begin
  lTmpStr := TCommonUtils.GetAutoIncreaseID(Self.Context,
    SysUtils.FormatDateTime('yyyymm', Business.Data.SysSrv.SysService.Time), '');

  lTmpStr := StringUtils.Copy(cZeroLeng, 1, Length(cZeroLeng) - Length(lTmpStr))
    + lTmpStr;
  lDateStr := SysUtils.FormatDateTime('yyyymm', Business.Data.SysSrv.SysService.Time);
  Result := lDateStr + lTmpStr;
end;
回复 支持 反对

使用道具 举报

发表于 2007-5-22 14:46:15 | 显示全部楼层
需要引用 业务模型\业务系统\公共\公共函数\公共函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 16:23:55 | 显示全部楼层
ok,结贴吧
回复 支持 反对

使用道具 举报

发表于 2007-10-31 20:29:59 | 显示全部楼层
我在信息中写lTmpStr := TCommonUtils.GetAutoIncreaseID(Self.Context,lString,'');出错,为什么


// 根据条件 自动编号
function GetIncNUm(lString : String): string;
const
  cZeroLeng = '00';
var
  lDateStr, lTmpStr: string;
begin
  lTmpStr := TCommonUtils.GetAutoIncreaseID(Self.Context,lString,'');
    //SysUtils.FormatDateTime('yyyymm', Business.Data.SysSrv.SysService.Time), '');

  lTmpStr := StringUtils.Copy(cZeroLeng, 1, Length(cZeroLeng) - Length(lTmpStr))
    + lTmpStr;
  //lDateStr := SysUtils.FormatDateTime('yyyymm', Business.Data.SysSrv.SysService.Time);
  lDateStr := lString;
  Result := lDateStr + lTmpStr;
end;
回复 支持 反对

使用道具 举报

发表于 2007-10-31 21:31:12 | 显示全部楼层
搞定了。。。
可是我写在信息的BeforePost事件 每做一次修改 编号就会自动加一 是不是哪边写错了


===
//参数说明:AString要翻译的字符串
//返回值中如果有非汉字存在原样取出
function TZDHSBS.StringtoPY(AString: string): string;
var
  lStringList: TStringList;
  I, lIndex: Integer;
  lStr: string;
begin
  lStringList := TStringList.Create;
  try
    lStringList.LoadFromFile(Business.System.JSCommon.ModulePath + 'PYCODE.DAT');
    for I := 0 to lStringList.Count - 1 do
    begin
      lStr := lStringList.Strings[I];
      lStringList.Strings[I] := lStr.Replace(StringUtils.Copy(lStr, 2, 5), '=');
    end;
    lStr := '';
    for I := 1 to AString.Length do
    begin
      lIndex := lStringList.IndexOfName(StringUtils.Copy(AString, I, 1));
      if lIndex <> -1 then
        lStr := lStr + lStringList.Values[StringUtils.Copy(AString, I, 1)]
      else
        lStr := lStr + StringUtils.Copy(AString, I, 1);
    end;
    result := lStr;
  finally
    lStringList.Free;
  end;
end;

// 根据条件 自动编号
function TZDHSBS.GetIncNUm(lString : String): string;
const
  cZeroLeng = '00';
var
  lDateStr, lTmpStr: string;
begin
  lTmpStr := TCommonUtils.GetAutoIncreaseID(Self.Context,lString,'');
  lTmpStr := StringUtils.Copy(cZeroLeng, 1, Length(cZeroLeng) - Length(lTmpStr)) + lTmpStr;
  lDateStr := lString;
  Result := lDateStr + lTmpStr;
end;

procedure TZDHSBS.DataSetZDH_ZDHSBXXBBeforePost(DataSet: TDataSet);
var
  xtlxStr,azddStr,lxStr,sbbhStr,bhStr: string;
begin
   azddStr := StringtoPY(DataSetZDH_ZDHSBXXB.FieldByName('azdd').AsString); //安装地点汉字全拼
   Business.Model.ExtUtils.StringToPYCapitals(DataSetZDH_ZDHSBXXB.FieldByName('sblx').AsString, lxStr); //设备类型首字母
   DataSetZDH_ZDHXTXXB.Open;
   DataSetZDH_ZDHXTXXB.Locate('Inst_id',DataSetZDH_ZDHSBXXB.FieldByName('lsbh').AsString,[]);

   Business.Model.ExtUtils.StringToPYCapitals(DataSetZDH_ZDHXTXXB.FieldByName('GCMC').AsString, xtlxStr); //系统类型首字母
   sbbhStr := xtlxStr + '_' + azddStr + '_' + lxStr + '_' ;
   bhStr := GetIncNUm(sbbhStr);
   DataSetZDH_ZDHSBXXB.FieldByName('SBBH').AsString:= bhStr;
end;
回复 支持 反对

使用道具 举报

发表于 2007-11-1 08:17:41 | 显示全部楼层

恩,收藏

恩,收藏
回复 支持 反对

使用道具 举报

发表于 2007-11-1 09:14:05 | 显示全部楼层
写在信息的BeforePost事件 每做一次修改 编号就会自动加一 是不是哪边写错了

要换哪个事件中写  在NewRecord事件中写只有新记录时才编号 可是之前已有的记录 如何让他生成编号
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 09:50 , Processed in 0.041342 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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