access自动编号如何把当天日期做为初始值?

时间:2022-02-21 10:05:09
定单编号我要这样设计:200701231,前面是当前日期2007年1月23日第1个单,以后顺次加1,200701232,200701233....到第二天变成200701241,200701242,200701243,可以做到吗?在自动编号格式里如果设计

7 个解决方案

#1


不能做到,用VBA实现,在同一天内,取最后一条记录的ID OR 最大ID,加1,
否则重新编号。

#2


这个存储过程,实现自动编号格式。

CREATE TABLE [dbo].[zSYSComplexID] (
[zKeyWord] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[zPrefix] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[zCurrDate] [datetime] NOT NULL ,
[zCurValue] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE   procedure pro_GetSYSComplexID
@zkeyWord varchar(32),
@strComplexID varchar(64) output
as
   
declare @zCurrDate Datetime;
declare @zCurValue int;
declare @strMonth varchar(32);
             declare @strDay varchar(32);

SELECT @zCurrDate=zCurrDate, @zCurValue=zCurValue FROM zSYSComplexID where zKeyWord =@zKeyWord;
set @strComplexID = datename(yyyy,getdate());
if DATEPART(m,getdate()) > 9
           set @strMonth = str(DATEPART(m,getdate()),2,2);
        else
           set @strMonth = '0' + str(DATEPART(m,getdate()),1,1);

           if DATEPART(d,getdate()) > 9
set @strDay = str(DATEPART(d,getdate()),2,2);
         else
              set @strDay = '0' + str(DATEPART(d,getdate()),1,1);        
     
        set @strComplexID = @strComplexID + @strMonth + @strDay;

        if year(@zCurrDate) = year(getDate()) and
           month(@zCurrDate) = month(getDate()) and
           day(@zCurrDate) = day(getDate())
            set @zCurValue = @zCurValue + 1;
        else
           set @zCurValue = 1;

if @zCurValue >= 1000
  set @strComplexID =@strComplexID + str(@zCurValue,4,4);
if @zCurValue >= 100 and @zCurValue <1000
   set @strComplexID =@strComplexID + '0' + str(@zCurValue,3,3);
if @zCurValue >= 10 and @zCurValue <100
   set @strComplexID =@strComplexID + '00' +str(@zCurValue,2,2);
if @zCurValue >= 1 and @zCurValue <10
       set @strComplexID =@strComplexID + '000' + str(@zCurValue,1,1);

UPDATE zSYSComplexID SET zCurrDate =getdate(),zCurValue=@zCurValue WHERE zKeyWord =@zKeyWord;

GO

#3


可以,用VBA代码实现,定单编号=max(定单编号)+1

#4


楼上存储过程不能在 MDB access 中使用


    如何用代码在“默认值”里实现自动编号?单据流水号生成问题。《VBA》
    http://access911.net/index.asp?u1=a&u2=71FAB41E10DCE6F3


取当天日期用 FORMAT(DATE,"yyyymmdd")




 --911--

#5


access里有存储过程吗?怎么用?

--------------------------------------------------------------------------

Access本身没有存储过程,但有查询。

Access使用的是Jet-SQL,与SQL Server使用的T-SQL差别很大。

如:Access的查询中一次只能执行一条SQL语句,而SQL Server存储过程中可以放很多条SQL语句。


如果使用ADP项目,则可以在Access中编辑SQL Server存储过程,或执行。

#6


只用SQL无法做到,必须用VBA代码处理。

#7


在SQL Server中可以使用触发器实现,但在Access中不支持触发器,必须用VBA代码处理。

#1


不能做到,用VBA实现,在同一天内,取最后一条记录的ID OR 最大ID,加1,
否则重新编号。

#2


这个存储过程,实现自动编号格式。

CREATE TABLE [dbo].[zSYSComplexID] (
[zKeyWord] [varchar] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[zPrefix] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[zCurrDate] [datetime] NOT NULL ,
[zCurValue] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE   procedure pro_GetSYSComplexID
@zkeyWord varchar(32),
@strComplexID varchar(64) output
as
   
declare @zCurrDate Datetime;
declare @zCurValue int;
declare @strMonth varchar(32);
             declare @strDay varchar(32);

SELECT @zCurrDate=zCurrDate, @zCurValue=zCurValue FROM zSYSComplexID where zKeyWord =@zKeyWord;
set @strComplexID = datename(yyyy,getdate());
if DATEPART(m,getdate()) > 9
           set @strMonth = str(DATEPART(m,getdate()),2,2);
        else
           set @strMonth = '0' + str(DATEPART(m,getdate()),1,1);

           if DATEPART(d,getdate()) > 9
set @strDay = str(DATEPART(d,getdate()),2,2);
         else
              set @strDay = '0' + str(DATEPART(d,getdate()),1,1);        
     
        set @strComplexID = @strComplexID + @strMonth + @strDay;

        if year(@zCurrDate) = year(getDate()) and
           month(@zCurrDate) = month(getDate()) and
           day(@zCurrDate) = day(getDate())
            set @zCurValue = @zCurValue + 1;
        else
           set @zCurValue = 1;

if @zCurValue >= 1000
  set @strComplexID =@strComplexID + str(@zCurValue,4,4);
if @zCurValue >= 100 and @zCurValue <1000
   set @strComplexID =@strComplexID + '0' + str(@zCurValue,3,3);
if @zCurValue >= 10 and @zCurValue <100
   set @strComplexID =@strComplexID + '00' +str(@zCurValue,2,2);
if @zCurValue >= 1 and @zCurValue <10
       set @strComplexID =@strComplexID + '000' + str(@zCurValue,1,1);

UPDATE zSYSComplexID SET zCurrDate =getdate(),zCurValue=@zCurValue WHERE zKeyWord =@zKeyWord;

GO

#3


可以,用VBA代码实现,定单编号=max(定单编号)+1

#4


楼上存储过程不能在 MDB access 中使用


    如何用代码在“默认值”里实现自动编号?单据流水号生成问题。《VBA》
    http://access911.net/index.asp?u1=a&u2=71FAB41E10DCE6F3


取当天日期用 FORMAT(DATE,"yyyymmdd")




 --911--

#5


access里有存储过程吗?怎么用?

--------------------------------------------------------------------------

Access本身没有存储过程,但有查询。

Access使用的是Jet-SQL,与SQL Server使用的T-SQL差别很大。

如:Access的查询中一次只能执行一条SQL语句,而SQL Server存储过程中可以放很多条SQL语句。


如果使用ADP项目,则可以在Access中编辑SQL Server存储过程,或执行。

#6


只用SQL无法做到,必须用VBA代码处理。

#7


在SQL Server中可以使用触发器实现,但在Access中不支持触发器,必须用VBA代码处理。