访问:重置自动编号的查询

Access: A query that resets the autonumbering

我的数据库是为滑雪比赛而建的。这个想法是你可以填写人们滑雪的时间,数据库会根据先设定时间的人、你的性别和年龄自动计算你获得了什么样的奖牌。我制作了一个表格,使其能够注册并提供所有结果。

我现在遇到的唯一问题是在注册某人时,必须按年​​龄订购。我做到了,但现在自动编号都搞砸了。

我想要的是我可以输入所有参赛者的名字,然后我想要一个查询,我可以选择它来分配所有的起始号码。即使已经分配了号码,我也想重置它并在最近有人加入时再次分配它们。我不想删除自动编号字段并重新创建它,因为大多数时候我自己不会使用它,但其他人会,所以我想简单地按下分配它的按钮。

提前致谢!

Example how my database and a competition looks like

自动编号字段仅用于识别记录。不多也不少。

您需要的是 优先级(或等级)字段。

在显示记录的表单中,运行 为该字段编写如下代码:

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

只需为任何记录分配等级,记录将根据需要重新编号。