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
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--
如何用代码在“默认值”里实现自动编号?单据流水号生成问题。《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存储过程,或执行。
--------------------------------------------------------------------------
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
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--
如何用代码在“默认值”里实现自动编号?单据流水号生成问题。《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存储过程,或执行。
--------------------------------------------------------------------------
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代码处理。