2017-11-16 2 views
1

Ich benutze Access 2010. Ich habe ein Datenblattformular Projekte mit zwei Feldern, [Projektname] und [Priorität]. Ich möchte in der Lage sein, die Prioritätsnummer für einen der Datensätze zu aktualisieren und alle anderen Prioritätsnummern automatisch zu aktualisieren. Zum Beispiel hat Projekt Rot Priorität 1. Projekt Orange hat Priorität 2 und Projekt Blau hat Priorität 3. Wenn ich Blau auf Nummer 1 aktualisiere, möchte ich, dass Rot auf 2 und Orange auf 3 aktualisiert. Ist das möglich?Alle Datensätze neu nummerieren, wenn einer aktualisiert wird

Projects Form

Antwort

0

das möglich ist.

Verwenden Sie die NachAktualisierung Ereignis der Textbox mit Priorität:

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 
Verwandte Themen