我要新增一个字段的一个编号,这个编号是自动新增,我应如何新增成YYMMDD+***(流水号型)呢?

BarryW 2004-01-13 09:36:29
我要新增一个字段的一个编号,当我点新增按钮时,这个编号是自动新增,
我应如何新增成YYMMDD+***(流水号型)呢?


如今天是:04年01月13日;
新增第一张单的编号就是:040113001;
新增第二张单的编号就是:040113002;
新增第三张单的编号就是:040113003;
。。。。。。。。
类推;

谢谢!




...全文
165 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx1268 2004-06-16
  • 打赏
  • 举报
回复
还是一楼的好用
linjie208 2004-01-15
  • 打赏
  • 举报
回复
//生成信息编号函数
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;
荣爵 2004-01-15
  • 打赏
  • 举报
回复
查找当天的流水号记录,再加1,就得到当前的流水号
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
聚能量 2004-01-13
  • 打赏
  • 举报
回复
//上面错了,改正
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;
聚能量 2004-01-13
  • 打赏
  • 举报
回复
//上面错了,改正
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;
聚能量 2004-01-13
  • 打赏
  • 举报
回复
function AutoOrderNo(table,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(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;
ADWARDS00 2004-01-13
  • 打赏
  • 举报
回复
function tbhscq.buildbh1223(table,zd:string):string;
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的形式就可以了,改一点代码就可以了
hthunter 2004-01-13
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2649/2649338.xml?temp=.600979
参考一下我后面提供的那种方法
风在天涯 2004-01-13
  • 打赏
  • 举报
回复
楼上的方法不行的.
penet 2004-01-13
  • 打赏
  • 举报
回复
如果你用的是MS SQLserver2000的话.给你一点建义:
把这个字段设为decimal类型的.然后再修改这个字段下面的设置;默认值为:1.getdate()+000
2.identity:yes ;identity seed:1 ;identity increment:1
这个方法试一下.
47522341 2004-01-13
  • 打赏
  • 举报
回复
先用decodedate函数将日期分解成年月日三个变量;组成前六位;
然后从数据表中取编号字段的最大值;取其后三位;转换成数字类型后加一;
txlicenhe 2004-01-13
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/read_article.asp?id=22672
业务单号自动增长的处理办法

DragonBill 2004-01-13
  • 打赏
  • 举报
回复
写个procedure撷取序号喽

create procedure test
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联赛进入最后阶段,年底大抢分~~~~~~~~~~~~~~~~~~~~~
dichun 2004-01-13
  • 打赏
  • 举报
回复
档案号的格式: 四位年+两位月+两位日+四位档案号
即: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

ADWARDS00 2004-01-13
  • 打赏
  • 举报
回复
to cosmart(忧郁蓝) 你也太辛苦了吧,我只所以不把改好的代码贴出来就是想让楼主自己体会一下,哪知道你这么积极啊^_^

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧