我是VBA和Access的新手,我在一张桌子上查询,结果只能从我的桌子上找到活跃的病人。附加的表单允许我的用户完美地将数据输入表中。
我的表单上的数据输入字段之一是房间号,就我表中的数据而言,它不是唯一字段。但是,在查询中,这必须是唯一的,因为不能将两个患者分配到一个房间。
有没有办法阻止用户使用我的查询结果为两个活跃的患者分配相同的房间号码?我到处寻找答案,我发现最接近的是使用DlookUp,但我不确定这是如何工作的。
提前致谢。
答案 0 :(得分:0)
感谢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