我的数据库是为滑雪比赛而制作的。我们的想法是,您可以填写人们滑雪的时间,并且数据库会根据首先设定时间,您的性别和年龄的人自动计算您获得的奖牌类型。我已经制作了一个表格,可以注册并提供所有结果。
我现在遇到的唯一问题是签约时,必须按年龄订购。我做到了,但现在自动编号都搞砸了。
我想要的是我可以把竞争对手的所有名字都放进去,之后我想要一个我可以选择的查询来分配所有的起始号码。即使已经分配了数字,我想重置它并在最近有人加入时重新分配它们。我不想删除自动编号字段并再次进行,因为大部分时间我都不会自己使用它,但其他人会这样做,所以我想简单地按下分配它的按钮。
提前致谢!
答案 0 :(得分:0)
自动编号字段仅用于识别记录。不多也不少。
您需要的是优先级(或 Rank )字段。
在显示记录的表单中,为该字段运行如下代码:
Private Sub Priority_AfterUpdate()
Dim rst As DAO.Recordset
Dim lngId As Long
Dim lngPriorityNew As Long
Dim lngPriorityFix As Long
' Save record.
Me.Dirty = False
' Prepare form.
DoCmd.Hourglass True
Me.Repaint
Me.Painting = False
' Current Id and priority.
lngId = Me!Id.Value
lngPriorityFix = Nz(Me!Priority.Value, 0)
If lngPriorityFix <= 0 Then
lngPriorityFix = 1
Me!Priority.Value = lngPriorityFix
Me.Dirty = False
End If
' Rebuild priority list.
Set rst = Me.RecordsetClone
rst.MoveFirst
While rst.EOF = False
If rst!Id.Value <> lngId Then
lngPriorityNew = lngPriorityNew + 1
If lngPriorityNew = lngPriorityFix Then
' Move this record to next lower priority.
lngPriorityNew = lngPriorityNew + 1
End If
If Nz(rst!Priority.Value, 0) = lngPriorityNew Then
' Priority hasn't changed for this record.
Else
' Assign new priority.
rst.Edit
rst!Priority.Value = lngPriorityNew
rst.Update
End If
End If
rst.MoveNext
Wend
' Reorder form and relocate record.
Me.Requery
Set rst = Me.RecordsetClone
rst.FindFirst "Id = " & lngId & ""
Me.Bookmark = rst.Bookmark
' Present form.
Me.Painting = True
DoCmd.Hourglass False
Set rst = Nothing
End Sub
只需为任何记录分配排名,记录将在需要时重新编号。