访问:重置自动编号的查询
Access: A query that resets the autonumbering
我的数据库是为滑雪比赛而建的。这个想法是你可以填写人们滑雪的时间,数据库会根据先设定时间的人、你的性别和年龄自动计算你获得了什么样的奖牌。我制作了一个表格,使其能够注册并提供所有结果。
我现在遇到的唯一问题是在注册某人时,必须按年龄订购。我做到了,但现在自动编号都搞砸了。
我想要的是我可以输入所有参赛者的名字,然后我想要一个查询,我可以选择它来分配所有的起始号码。即使已经分配了号码,我也想重置它并在最近有人加入时再次分配它们。我不想删除自动编号字段并重新创建它,因为大多数时候我自己不会使用它,但其他人会,所以我想简单地按下分配它的按钮。
提前致谢!
自动编号字段仅用于识别记录。不多也不少。
您需要的是 优先级(或等级)字段。
在显示记录的表单中,运行 为该字段编写如下代码:
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
只需为任何记录分配等级,记录将根据需要重新编号。
我的数据库是为滑雪比赛而建的。这个想法是你可以填写人们滑雪的时间,数据库会根据先设定时间的人、你的性别和年龄自动计算你获得了什么样的奖牌。我制作了一个表格,使其能够注册并提供所有结果。
我现在遇到的唯一问题是在注册某人时,必须按年龄订购。我做到了,但现在自动编号都搞砸了。
我想要的是我可以输入所有参赛者的名字,然后我想要一个查询,我可以选择它来分配所有的起始号码。即使已经分配了号码,我也想重置它并在最近有人加入时再次分配它们。我不想删除自动编号字段并重新创建它,因为大多数时候我自己不会使用它,但其他人会,所以我想简单地按下分配它的按钮。
提前致谢!
自动编号字段仅用于识别记录。不多也不少。
您需要的是 优先级(或等级)字段。
在显示记录的表单中,运行 为该字段编写如下代码:
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
只需为任何记录分配等级,记录将根据需要重新编号。