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

时间:2017-10-11 09:52:42

标签: ms-access autonumber

我的数据库是为滑雪比赛而制作的。我们的想法是,您可以填写人们滑雪的时间,并且数据库会根据首先设定时间,您的性别和年龄的人自动计算您获得的奖牌类型。我已经制作了一个表格,可以注册并提供所有结果。

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

我想要的是我可以把竞争对手的所有名字都放进去,之后我想要一个我可以选择的查询来分配所有的起始号码。即使已经分配了数字,我想重置它并在最近有人加入时重新分配它们。我不想删除自动编号字段并再次进行,因为大部分时间我都不会自己使用它,但其他人会这样做,所以我想简单地按下分配它的按钮。

提前致谢!

Example how my database and a competition looks like

1 个答案:

答案 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

只需为任何记录分配排名,记录将在需要时重新编号。