2017-11-16 3 views
1

私はAccess 2010を使用しています。というプロジェクトのというデータシートフォームがあります。[プロジェクト名]と[優先度]の2つのフィールドがあります。いずれかのレコードのプライオリティ番号を更新し、他のプライオリティ番号が自動的に更新されるようにしたいと考えています。たとえば、プロジェクトレッドが優先1です。プロジェクトオレンジは優先度2、プロジェクトブルーは優先度3です。ブルーを1に更新すると、レッドを2に、オレンジを3に更新します。これが可能ですか?可能である更新時にすべてのレコードの番号を変更します。

Projects Form

答えて

0

使用優先順位を持つテキストボックスのAfterUpdateイベント:

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 
関連する問題