我有一个Access数据库,用于存放工人赔偿事故信息。其中一个必填字段是OSHA可记录号码,该号码以“01”和事故的两位数年份(例如01-14)顺序排列。
我需要能够以程序方式查看我的表格,看看已经使用了哪些数字并找到序列中的下一个数字。它还需要在新的一年开始时重置为1。
实施例: 表读
01-14
02-14
03-14
填充文本框的新数字应为04-14
帮助!
答案 0 :(得分:0)
鉴于您拥有多用户数据库,请参阅insert query with sequential primary key或Access 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_date
或accident_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