上面是一张表格,显示了我想要阻止的内容。它允许输入同一台机器1同时与两个合同相关的记录。如果具有相同idMachine的所有其他记录的单元格contracEnded NOT NULL,我如何创建一个只能插入新记录的表格?谢谢你的帮助。
答案 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
,目前的条目尚未存在,因此它不会被计算。