我想编写一个自动生成单号的函数?要求:格式为日期+单号 如:今天是2004-07-02
第一张单的话单号为200407020001,第二张单为:200407020002,如果日期变为是2004-07-03的第一张单为:200407030001:每天的单号都从0001开始累加。如何实现??
第一张单的话单号为200407020001,第二张单为:200407020002,如果日期变为是2004-07-03的第一张单为:200407030001:每天的单号都从0001开始累加。如何实现??
解决方案 »
- 关于关闭窗体的问题
- 求救..
- 请教:如何让Toolbar或者Controlbar在程序一运行就自动悬浮出来?
- 判断ClientDataSet.Delta.或有关OleVariant类型的帮助。
- 用READLN读一个文件 怎样才知道已经读完了呢?
- 求《Delphi 7项目开发实践》内容简介的电子版
- 关于转库
- ×××××××××怎样把FLOAT类型的值四舍五入?××××××××××××(转原贴)
- 高分索取酒店示意图的原代码或控件,谢谢!
- 关于Remobjects控件安装的问题。
- tstream的问题?
- 请问Delphi+Oracle9中,怎样将SqlServer表中的图片转储到Oracle一个表中?
-------- 你这个格式 最好确定下来... 为 yyyy-mm-dd格式最好...
如果确定下来了..
你就去数据库获取 已经存在的当天的单号的最大值 如果有
然后获取 最大值 + 1 就是当前的单号. 如果没有 就定为0001但是如果这个单号是主键的话 你需要在保存的时候校验此单号是否存在 如果存在你需要 再+1以重试... 这样是比较简单的处理方法...
然后加上编号
GO
IF EXISTS (SELECT *
FROM sysobjects
WHERE name = 'Createrkdh')
DROP FUNCTION Createrkdh
GOCREATE FUNCTION Createrkdh()
RETURNS varchar(4) AS
BEGIN
declare @bat varchar(16)
declare @tch varchar(10)
declare @oct varchar(9)
declare @num int
set @oct = ''
--取当前“订单表”中的最大订单号
select @bat = isNull(max(rkdh),'0000000000000000') from Ykrkd
set @tch = substring(@bat,13,4) --从第13位开始,截取4位长度
if @tch = '9999'
set @tch = '0000'
else
set @tch = convert(varchar,convert(int,@tch) + 1)
if len(@tch) < 4
begin
set @num = 4 - len(@tch)
while (@num > 0) --循环在前面填充‘0’直到长度为4
begin
set @oct = @oct + '0'
set @num = @num - 1
end
set @tch = @oct + @tch
end
return @tch
END在前面并上系统
Var
i:Integer;
Begin
For i := 1 To 9999 Do
Begin
//生成日期+单号格式
Result := Copy('0000' + IntToStr(i), Length('0000' + IntToStr(i)), 4);
Result := DateToStr(Date)) + Result;
{检测单号是否存在, 若不存在,则退出 }
If 单号不存在 then
Exit;
End;
End;