Доступ к непрерывной форме управляет порядком записи [дубликат]

[Д0] == сравнивает опорное значение объектов, тогда как equals() метод присутствует в java.lang.String класса сравнивает содержимое String объекта (к другому объекту).

0
задан Shadow 11 October 2017 в 10:32
поделиться

1 ответ

Поле Autonumber предназначено только для идентификации записей. Не более того.

Вам нужно поле Priority (или 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

Просто присвойте ранг любой записи, и записи будут перенумерованы как и при необходимости.

0
ответ дан Gustav 15 August 2018 в 17:03
поделиться
  • 1
    Спасибо за ваш ответ! Как я уже сказал выше, я не очень-то знаком с доступом ... Можете ли вы быть более конкретным, где и как я могу реализовать этот код? – J. Moonen 11 October 2017 в 12:48
  • 2
    я нашел, что принятый ответ по этой ссылке достаточно справедливо. Не уверен, что это будет делать с тай-брейками. [Д0] stackoverflow.com/questions/4463116/… – Darren Bartrup-Cook 11 October 2017 в 12:54
  • 3
    code-behind формы, которую вы используете. Добавьте поле с именем Приоритет типа данных Integer в вашу таблицу, включите его в форму и вставьте код в качестве события AfterUpdate текстового поля, связанного с этим полем. – Gustav 11 October 2017 в 13:06
  • 4
    @ DarrenBartrup-Cook: Трюк заключается в том, чтобы добавить совпадение ID-Rank в коллекцию один раз, а затем прочитать ранг очень быстро, независимо от того, как вы просматриваете форму. – Gustav 11 October 2017 в 13:11
  • 5
    Итак, @Gustav, когда вы ссылаетесь на AfterUpdate, вы имеете в виду использование этого в макросе? По крайней мере, это то, что я получаю, когда я это делаю google ... – J. Moonen 11 October 2017 в 18:53
Другие вопросы по тегам:

Похожие вопросы: