ms访问权限在form.activate上有条件地更新字段

时间:2018-09-29 12:03:11

标签: sql vba ms-access ms-access-2010 ms-access-2013

我的问题与MS Access中的字段需要自动添加自定义代码的情况有关,特别是与在OnActivate事件中使用此类代码所引起的问题。

我有一个[Group_ID]字段,每次使用OnCurrent和OnActivate事件中的自定义代码创建新记录时,该字段都会自动递增。有时我需要将Group_ID递增OnActivate,但有时我不需要。在某些情况下,用户实际上将使用“重复记录”按钮为后续记录使用相同的Group_ID(以及大多数其他字段)。在这种情况下,我想为OnActivate事件设置一个条件,该条件允许用户在返回表单以完成记录时无需重新查询Group_ID即可引用其他表单或表。这是我的代码:

'increments Group_ID when a new record is made

Private Sub Form_Current()
    If Me.NewRecord = True Then
        Me.Group_ID = Nz(DMax("Group_ID", "All_sightings"), 1) + 1
    End If
End Sub

'increments Group_ID when the form becomes active IF the value is no
longer max value + 1

Private Sub Form_Activate()
If Me.Group_ID = Nz(DMax("Group_ID", "All_sightings")) + 1 Then
    Else
        Me.Requery
End If
End Sub

我想做的是向Form_Activate子项添加一个附加条件,以检查用户返回到以下位置后重新激活表单时,是否已经填写了其他字段(例如,是否使用了“ duplicate”按钮)。部分完成的记录。该字段不需要用户输入,因为当用户单击重复按钮时,它将自动填充。我选择的字段是[UTM_x]。

我尝试过:

=IIF(Me.Group_ID = Nz(DMax("Group_ID", "All_sightings")) + 1 And Not IsNull(Me.UTM_x), "", Me.Requery)

以及嵌套的IIF()和IfThenElse语句的各种其他组合,但是没有任何运气。当Group_ID不大于(max + 1)时,每次OnActivate事件时,表单都会继续重新查询。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我使用了iif语句和更多的if-then-else语句,最终找到了解决我问题的方法。在这里:

Private Sub Form_Activate()
If Me.Group_ID = Nz(DMax("Group_ID", "All_sightings")) + 1 Then
'blank/do nothing because Group_ID is already max+1
    ElseIf IsNull(UTM_x) Then
        Me.Requery 'makes Group_ID max+1 because null UTM_x means it's a new record
        Else
            'blank/do nothing because Group_ID = max and this is a duplicated record
End If

End Sub