我要新增一个字段的一个编号,当我点新增按钮时,这个编号是自动新增,
我应如何新增成YYMMDD+***(流水号型)呢?
如今天是:04年01月13日;
新增第一张单的编号就是:040113001;
新增第二张单的编号就是:040113002;
新增第三张单的编号就是:040113003;
。。
类推;谢谢!
我应如何新增成YYMMDD+***(流水号型)呢?
如今天是:04年01月13日;
新增第一张单的编号就是:040113001;
新增第二张单的编号就是:040113002;
新增第三张单的编号就是:040113003;
。。
类推;谢谢!
解决方案 »
- delphi2005 Activex 嵌入网页的问题
- 关于使用BPL包开发模式的问题!!!!!!
- 请问如何用delphi实现 del *.* 功能 ?
- 各位好.....我是初学者..请各位给我指点..我该怎样学好delphi
- 专家debug!
- 低价发行,免费试用,助手医院信息管理系统(中小医院专用),详情请进!
- 关于delphi中与SQL SEVER 的连接??
- 请问如何保存论坛的内容?
- 如何开发能在NT中执行的服务程序
- 哪位高手能帮我看一下这个程序的问题所在?
- 帮帮忙!!quickreport问题??
- ListView中添加了几个QQ那样的图标,如何实现像QQ那样消息来了自动闪烁头像的功能?
业务单号自动增长的处理办法
然后从数据表中取编号字段的最大值;取其后三位;转换成数字类型后加一;
把这个字段设为decimal类型的.然后再修改这个字段下面的设置;默认值为:1.getdate()+000
2.identity:yes ;identity seed:1 ;identity increment:1
这个方法试一下.
参考一下我后面提供的那种方法
var strsql:string;
bh:string;
day:string;
str:string;
begin
str:=formatdatetime('yyyy_mm_dd',date());
day:= copy(str,4,1)+copy(str,6,2)+copy(str,9,2);
strsql:='select max('+zd+') as zd from '+table+' where '+zd+' LIKE '+''''+day+'%''';
try
with ObjAdoDataSet do
begin
Connection:=ObjAdoConnection;
CommandType:=cmdtext;
CommandText:=strsql;
Active:=True;
if objadodataset.Fields[0].text<>'' then
begin
bh:=trim(objadodataset.Fields[0].text);
if copy(bh,1,5)=day then
begin
str:=inttostr(strtoint(copy(bh,6,3))+1);
if length(str)=1 then str:='00'+str;
if length(str)=2 then str:='0'+str;
result:=day+str;
end
else
result:=day+'001';
end
else
result:=day+'001';
end;
except
showmessage('数据库连接错误,请重试。');
end;
end;我这个函数是生成你要的编号的函数,不过我是2001-01-01变成10101001,也就是1-2-2-3的形式,你只需要改成2-2-2-3的形式就可以了,改一点代码就可以了
var strsql:string;
OrderNo:string;
day:string;
str:string;
begin
str:=formatdatetime('yyyy_mm_dd',date());
day:= copy(str,3,2)+copy(str,6,2)+copy(str,9,2);
strsql:='select max('+zd+') as zd from '+table+' where '+zd+' LIKE '+''''+day+'%'''; Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add(strsql);
Query1.Open;
if not Query1.Eof then
begin
OrderNo :=trim(objadodataset.Fields[0].text);
if copy(bh,1,6)=day then
begin
str:=inttostr(strtoint(copy(bh,7,3))+1);
if length(str)=1 then str:='00'+str;
if length(str)=2 then str:='0'+str;
result:=day+str;
end
else
result:=day+'001';
end
else
result:=day+'001';
end;
end;
function AutoOrderNo(zd:string):string;
var strsql:string;
OrderNo:string;
day:string;
str:string;
begin
str:=formatdatetime('yyyy_mm_dd',date());
day:= copy(str,3,2)+copy(str,6,2)+copy(str,9,2);
strsql:='select max('+zd+') as zd from '+table+' where '+zd+' LIKE '+''''+day+'%'''; Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add(strsql);
Query1.Open;
if not Query1.Eof then
begin
OrderNo :=trim(objadodataset.Fields[0].text);
if copy(OrderNo,1,6)=day then
begin
str:=inttostr(strtoint(copy(OrderNo,7,3))+1);
if length(str)=1 then str:='00'+str;
if length(str)=2 then str:='0'+str;
result:=day+str;
end
else
result:=day+'001';
end
else
result:=day+'001';
end;
end;
function AutoOrderNo(table,OrderNum:string):string;
var strsql:string;
OrderNo:string;
day:string;
str:string;
begin
str:=formatdatetime('yyyy_mm_dd',date());
day:= copy(str,3,2)+copy(str,6,2)+copy(str,9,2);
strsql:='select max('+OrderNum+') as OrderNum from '+table+' where '+OrderNum+' LIKE '+''''+day+'%'''; Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add(strsql);
Query1.Open;
if not Query1.Eof then
begin
OrderNo :=trim(objadodataset.Fields[0].text);
if copy(OrderNum,1,6)=day then
begin
str:=inttostr(strtoint(copy(OrderNum,7,3))+1);
if length(str)=1 then str:='00'+str;
if length(str)=2 then str:='0'+str;
result:=day+str;
end
else
result:=day+'001';
end
else
result:=day+'001';
end;
end;
即:200202260001
档案编号表:记录当前最新的档案编号,只有一个记录.为了防止记录 出现重复的情况.
CREATE PROCEDURE prGetNo --产生按年月日排列的档案号
@No varchar(12) output ---为产生的档案号
AS
declare @Year Int,
@Month int,
@Day int,
@Temp_No varchar(12),
@NeedNo varchar(4) --档案号
BEGIN
select @year=Year(GetDate())
select @Month=Month(GetDate())
select @Day=Day(GetDate())
select @No=Str(@Year,4,0)+
(select
case
when @Month>=10 then Str(@Month,2,0)
when @Month<10 Then '0'+Str(@Month,1,0)
end)+
(select
case
when @Day>=10 then Str(@Day,2,0)
when @Day<10 Then '0'+Str(@Day,1,0)
end)
SELECT @Temp_No = 档案编号 FROM 档案编号表
IF @No <> SUBSTRING( @Temp_No,1,8)
SELECT @No = @No+'0001'
ELSE
BEGIN
SELECT @RandNo = STR(CONVERT(int,(SUBSTRING( @Temp_No ,9,4))+1),4,0)
SELECT @RandNo = REPLACE( @RandNo,' ','0')
SELECT @No = @No + @RandNo
END
UPDATE 档案编号表
SET 档案编号 = @No
END
END
as
begin
declare @datestr varchar(100)
declare @maxSeq int
end select @datestr=convert(char(8), getdate(),112) select @maxSeq=count(*)+1 from dtproperties
set @datestr=@datestr + cast(@maxSeq as char(99)) print @datestr return @datestr
go其中 @datestr 返回值就是所需序号,再拿此序号新增喽。2003赛季CSDN联赛进入最后阶段,年底大抢分~~~~~~~~~~~~~~~~~~~~~
GetSystemDateTime:获得当前系统的时间(自己编写的)
------------------------------------------------------
select * from StoreIn_Info where DHandDate between to_date(to_char(sysdate,''yyyy-mm-dd''),''yyyy-mm-dd'') and to_date(to_char(sysdate+1,''yyyy-mm-dd''),''yyyy-mm-dd'')'
tempVID := IntToStr(DBBTemp.SQLClientDataSet.RecordCount+1);
Result := 'R' + FormatDateTime('yyyymmdd',GetSystemDateTime) + Copy(Concat('00000',tempVID), Length(tempVID)+1, 5);
------------------------------------------------------
结果:R2004011300001
function TFrm_Intro_Regi.GetNewId(tablename,pkname:string):string;
var
strnewid:string;
strsql:string;
strpkdate:string;
strdate:string;
transstr:string;
IntNum:Integer;
PreZero:String;
Y1,M1,D1:Word;
I:Integer;
begin
Decodedate(date(),Y1,M1,D1); //获取当前年份
strdate:=inttostr(y1);
with ADOQuery2 do
begin
close;
sql.clear;
strsql:='select max('+pkname+') from '+tablename+' WITH (TABLOCK) where '+pkname+' like '+'''JS%'''; //取最大编号
sql.add(strsql);
open;
end;
TransStr:=adoquery2.fields[0].asstring;
strpkdate:=copy(TransStr,4,4); //取出编号中的年份
// I:=comparestr(strpkdate,strdate);
if (TransStr='') or (strpkdate<>strdate) then //与当前年份比较,若不同取当前年份
StrNewID :='JS-'+strdate+'-'+'0001'
else
begin
TransStr:=Trim(TransStr);
TransStr:=copy(TransStr,9,4);
TransStr:=IntToStr(StrToInt(TransStr)+1);
IntNum:=Length(TransStr);
PreZero:=''; //流水号补零
for I:=1 to 4-IntNum do
PreZero:=PreZero+'0';
StrNewID:='JS-'+strdate+'-'+PreZero+TransStr;
end;
adoQuery2.Close;
Result:=StrNewID;
end;