我是MS Access的新手。目前我需要创建一个序列号,一个带有子自动编号的自动编号对。比如M1-1,M1-2,M1-3,..。M2-1,M2-2,M2-3,...M3-1,M3-2,...编号必须是唯一的。我为M1、M2、M3等创建了一个主流水号的表。创建索引以使其唯一。然后另一张表代表子号,1,2,3,4,...之后是一个MainNum外键(关系)和另一个使其唯一的索引。但问题是第二个表我不能想出一个方法来使它成为自动编号/运行编号,因为它可能会重复。
目前没有想法,需要一些帮助。
发布于 2016-10-31 11:27:42
我建议不要在表格中使用序列号作为主键/外键。对此使用数字字段:自动编号为主要编号,编号为外国编号。它的工作速度更快,而且是自动的。
为了生成序列号,创建公共函数,该函数可以返回下一个值,也可以根据参数返回当前值。序列号的第一部分和第二部分的当前值存储在表中,在生成新编号时将其锁定,即使在多用户环境下也能保证下一个编号的唯一性。此外,您还可以将所有生成的数字存储在表中,并对这两个数字建立复合唯一索引。
发布于 2016-10-31 20:42:51
将你的PK设置为自动编号,并将其用于任何关系。对于序列号,请使用两个长整型字段(SN1、SN2)。在表单的before_update事件中,对于新记录,调用公共函数来生成新的“序列号”。
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim lngSN1 AS Long
Dim lngSN2 as Long
If Me.NewRecord Then
'if SN1 is not to be incremented, set it here to whatever you want
If GetSerials(SN1, SN2) Then
Me!SN1 = lngSN1
Me!SN2 = lngSN2
Else
Cancel = True
End If
End If
End Sub
Public Function GetSerials(ByRef SN1 as Long, ByRef SN2 as Long) AS Boolean
If SN1 = 0 Then
SN1 = Nz(DMax("SN1","<yourTable>"), 0) + 1
SN2 = 1
Else
SN2 = DMax("SN2", "<yourtable>","SN1=" & SN1) + 1
End IF
GetSerials = True
End Function使用计算字段构建查询以创建复合“SerialNumber”。
SELECT *, "M" & SN1 & "-" & SN2 as SerialNumber FROM <yourtable>在要显示SerialNumber的任何位置使用该查询。
https://stackoverflow.com/questions/40335468
复制相似问题