我目前正在为公司创建一个数据库,我需要为每条新记录添加一个客户ID。
我设计了一个data entry form并在其上运行了以下模块来创建ID:
选项比较数据库
函数NewCustomerIDCode()As Long
Dim db As Database
Dim LSQL As String
Dim LUpdate As String
Dim Lrs As DAO.Recordset
Dim LNewCustomerIDCode As Long
On Error GoTo Err_Execute
Set db = CurrentDb()
'Retrieve last number assigned for Customer ID Code
LSQL = "Select Last_Nbr_Assigned from CustomerIDCode"
LSQL = LSQL & " where Code_Desc = 'Customer ID Code'"
Set Lrs = db.OpenRecordset(LSQL)
'If no records were found, return an error
If Lrs.EOF = True Then
LNewCustomerIDCode = 0
MsgBox "There was no entry found in the Codes table for Customer ID Code."
Else
'Determine new Customer ID Code
LNewCustomerIDCode = Lrs("Last_Nbr_Assigned") + 1
'Increment Customer ID Code in CustomerIDCode table by 1
LUpdate = "Update CustomerIDCode"
LUpdate = LUpdate & " set Last_Nbr_Assigned = " & LNewCustomerIDCode
LUpdate = LUpdate & " where Code_Desc = 'Customer ID Code'"
db.Execute LUpdate, dbFailOnError
End If
Lrs.Close
Set Lrs = Nothing
Set db = Nothing
NewCustomerIDCode = LNewCustomerIDCode
Exit Function
Err_Execute: '发生错误,返回0 NewCustomerIDCode = 0 MsgBox“尝试确定要分配的下一个客户ID代码时发生错误。”
结束功能
问题是,如果有人开始以这种形式输入数据,则分配ID(例如:1023)。如果由于任何原因他们决定不填写条目并删除记录,则下一个条目将获得数字(例如:1024)。但我需要重复使用1023因为它没有链接到记录。出于会计原因,我不能跳过这个号码。
另一方面,如果创建了新记录,并且由于某种原因在一年内被删除,则其号码无法重复使用。例如,我们删除记录1023,但我们最后输入的记录是1145,下一条记录应该是1146而不是删除的10210。
仅仅为了一些背景信息,我有一个单独的Autonumber作为主键。这对用户不可见,对记录没有任何意义,除了Access为每条记录都有唯一的编号。
有人可以帮忙吗?我一直在网上搜索一天,我能找到的唯一的东西是关于自动装置,这里不适用。