序列号自动填充字段

时间:2014-03-03 19:37:43

标签: sql function vba ms-access

我有一个Access数据库,用于存放工人赔偿事故信息。其中一个必填字段是OSHA可记录号码,该号码以“01”和事故的两位数年份(例如01-14)顺序排列。

我需要能够以程序方式查看我的表格,看看已经使用了哪些数字并找到序列中的下一个数字。它还需要在新的一年开始时重置为1。

实施例: 表读

01-14 
02-14
03-14

填充文本框的新数字应为04-14

帮助!

2 个答案:

答案 0 :(得分:0)

鉴于您拥有多用户数据库,请参阅insert query with sequential primary keyAccess VBA: Find max number in column and add 1以获取下一个序列号的代码。

您可以使用Year和种子编号创建下一个OSHA编号。您可以在年度更改时重置种子编号。

DMax是可能的,但我强烈建议您不要在多用户数据库中使用它。

答案 1 :(得分:0)

根据您的描述,听起来应该在需要时生成OSHA编号,而不是在创建表格行时分配和存储。我的建议是让主键(accident_id)成为自动增量长整数,这是Access中的标准做法。此外,您还需要accident_date列为datetime或类似列。或者至少是一个accident_year列。然后,当您需要OSHA号码时(例如在报告中),只需要使用主键 - accident_id - 以及accident_dateaccident_year列生成一些VBA。您将利用Access自动增量主键永远不会重复使用的事实 - 即使删除了它们的行,这些数字也永远不会被回收用于其他行。因此,给定一个长整数主键和一个日期,您始终可以使用一个简单的算法重现完全相同的 OSHA编号,如下所示:

function osha_number(accident_id as long) as string
  accident_year = ... ' get (last two digits of) accident year from accidents table using ID
  year_first_accident_id = ... ' get ID of first accident of this year
  year_this_accident_num = accident_id - year_first_accident_id + 1

  osha_number = year_this_accident_num & "-" & accident_year
end function