消除链接到查询结果的重复表单条目
Eliminate Duplicate form entry linked to query result
我是 VBA 和 Access 的新手,我有一个关于 table 的查询,结果只给我 table 中的活跃患者。随附的表格允许我的用户将数据完美地输入 table。
我的表格中用于输入数据的字段之一是房间号,就我 table 中的数据而言,它不是唯一字段。但是,在查询中,这必须是唯一的,因为不能将两个患者分配到一个房间。
有什么方法可以防止用户使用我的查询结果为同一个房间号分配两个在职患者吗?我到处寻找答案,我找到的最接近的答案是使用 DlookUp,但我不确定它是如何工作的。
提前致谢。
感谢 Wayne 的回答,我制作了复合键,但注意到用户必须将大量信息添加到表单中,然后按回车键,结果却没有看到患者被添加到列表中。这并没有真正让我得到我想要的东西,但它让我找到了正确的方向......
我终于想出了一个代码,通过在查询结果中使用 Dcount 来查找输入到表单中的房间号,并将此代码放在房间号的 onExit 事件中,这样我就可以将焦点发送回去直到用户提交正确答案。
我已经设置了字段验证以确保输入正确的房间号范围。这现在有可能让用户陷入无限循环。因此,我将不得不在错误消息中添加另一个 if 语句,以在用户想不出要放入该字段的空房间号时将其送出循环。
无论如何,这是我想出的解决方案。
首先,我在我的表单中添加了另一个文本框 "Me.txtResult" 以查看 Dcount 的结果,这现在并不是真正必要的。但是,它在代码中,所以我想我应该解释一下那部分。
Private Sub txtRoomNo_Exit(Cancel As Integer)
On Error GoTo Err_txtRoomNo_Exit
Dim strRmX As Integer
Dim strRmNo As Integer
strRmNo = Me.txtRoomNo
strRmX = DCount("[2017].[ID]", "2017 Query", "[2017].[Room#]=" & strRmNo)
Me.txtResult = strRmX
If strRmX > 0 Then
MsgBox "Sorry, it appears the room number you entered" & vbCrLf & _
" is already occupied by another patient" & vbCrLf & vbCrLf & _
" Click OK to try another room number.", vbCritical,
"Surgical Weaning Tool User Data Entry Error!"
Me.txtRoomNo.SetFocus
End If
Exit_txtRoomNo_Exit:
Exit Sub
Err_txtRoomNo_Exit:
MsgBox " Error: For Room# Entry Duplicate Check" & vbCrLf & _
" for New Patient Form" & vbCrLf & vbCrLf & _
" " & Error$ & " " & vbCrLf & vbCrLf & _
" Please write down ALL the above message and" & vbCrLf & _
" Inform Jim about this error" & vbCrLf & _
" As Soon As Possible. Thank You!" & vbCrLf & vbCrLf & _
" Please double check the room number you" & vbCrLf & _
" just entered is not alread in use!", vbCritical,
"Surgical Weaning Tool - - ERROR!"
Resume Exit_txtRoomNo_Exit
End Sub
我是 VBA 和 Access 的新手,我有一个关于 table 的查询,结果只给我 table 中的活跃患者。随附的表格允许我的用户将数据完美地输入 table。
我的表格中用于输入数据的字段之一是房间号,就我 table 中的数据而言,它不是唯一字段。但是,在查询中,这必须是唯一的,因为不能将两个患者分配到一个房间。
有什么方法可以防止用户使用我的查询结果为同一个房间号分配两个在职患者吗?我到处寻找答案,我找到的最接近的答案是使用 DlookUp,但我不确定它是如何工作的。
提前致谢。
感谢 Wayne 的回答,我制作了复合键,但注意到用户必须将大量信息添加到表单中,然后按回车键,结果却没有看到患者被添加到列表中。这并没有真正让我得到我想要的东西,但它让我找到了正确的方向......
我终于想出了一个代码,通过在查询结果中使用 Dcount 来查找输入到表单中的房间号,并将此代码放在房间号的 onExit 事件中,这样我就可以将焦点发送回去直到用户提交正确答案。
我已经设置了字段验证以确保输入正确的房间号范围。这现在有可能让用户陷入无限循环。因此,我将不得不在错误消息中添加另一个 if 语句,以在用户想不出要放入该字段的空房间号时将其送出循环。
无论如何,这是我想出的解决方案。 首先,我在我的表单中添加了另一个文本框 "Me.txtResult" 以查看 Dcount 的结果,这现在并不是真正必要的。但是,它在代码中,所以我想我应该解释一下那部分。
Private Sub txtRoomNo_Exit(Cancel As Integer)
On Error GoTo Err_txtRoomNo_Exit
Dim strRmX As Integer
Dim strRmNo As Integer
strRmNo = Me.txtRoomNo
strRmX = DCount("[2017].[ID]", "2017 Query", "[2017].[Room#]=" & strRmNo)
Me.txtResult = strRmX
If strRmX > 0 Then
MsgBox "Sorry, it appears the room number you entered" & vbCrLf & _
" is already occupied by another patient" & vbCrLf & vbCrLf & _
" Click OK to try another room number.", vbCritical,
"Surgical Weaning Tool User Data Entry Error!"
Me.txtRoomNo.SetFocus
End If
Exit_txtRoomNo_Exit:
Exit Sub
Err_txtRoomNo_Exit:
MsgBox " Error: For Room# Entry Duplicate Check" & vbCrLf & _
" for New Patient Form" & vbCrLf & vbCrLf & _
" " & Error$ & " " & vbCrLf & vbCrLf & _
" Please write down ALL the above message and" & vbCrLf & _
" Inform Jim about this error" & vbCrLf & _
" As Soon As Possible. Thank You!" & vbCrLf & vbCrLf & _
" Please double check the room number you" & vbCrLf & _
" just entered is not alread in use!", vbCritical,
"Surgical Weaning Tool - - ERROR!"
Resume Exit_txtRoomNo_Exit
End Sub