如果单元格为空,则允许重复单元格值的新记录

时间:2017-01-26 16:09:48

标签: ms-access

Example

上面是一张表格,显示了我想要阻止的内容。它允许输入同一台机器1同时与两个合同相关的记录。如果具有相同idMachine的所有其他记录的单元格contracEnded NOT NULL,我如何创建一个只能插入新记录的表格?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

假设您使用表单输入数据(您应该使用),您可以尝试将以下VBA代码放入用于输入数据的控件的BeforeUpdate事件中。在这里,我假设此控件是一个名为txtIdMachine的文本框,它绑定到表格中的idMachine字段(我假设它名为tblMachines

Private Sub txtIdMachine_BeforeUpdate(Cancel As Integer)
    Dim numMachines As Integer, numEnded As Integer

    numMachines = DCount("idMachine", "tblMachines", _
        "idMachine = " & Me.txtIdMachine)
    numEnded = DCount("*", "tblMachines", _
        "contractEnded Is Not Null And idMachine = " & Me.txtIdMachine)
    If (numMachines - numEnded > 0) Then
        Cancel = True
        MsgBox "Machine " & Me.txtIdMachine & " is already in use." & _
            vbNewLine & "Select a new machine."
    End If
End Sub

DCount(A,B,C)函数将返回匹配搜索字符串A的表或查询B中字段C的匹配条目数(基本上是来自的WHERE子句)一个SQL查询)。 A,B,C是字符串。 "*"告诉它搜索所有列。

最后,您只需从该机器的非Null结束日期数中减去用户尝试输入Me.txtIdMachine的机器号的实例数,并检查是否存在没有结束日期的任何idMachine。由于它已完成BeforeUpdate,目前的条目尚未存在,因此它不会被计算。