消除链接到查询结果的重复表单条目

Posted

技术标签:

【中文标题】消除链接到查询结果的重复表单条目【英文标题】:Eliminate Duplicate form entry linked to query result 【发布时间】:2017-06-08 21:44:17 【问题描述】:

我是 VBA 和 Access 的新手,我对一个表进行了查询,结果只给了我表中的活动患者。随附的表格允许我的用户完美地将数据输入到表格中。

我的表格中用于数据输入的字段之一是房间号,就我表中的数据而言,它不是唯一的字段。但是,在查询中,这必须是唯一的,因为不能将两个患者分配到一个房间。

有没有办法阻止用户使用我的查询结果为两个活跃的患者分配相同的房间号?我到处寻找答案,我发现最接近的方法是使用 DlookUp,但我不确定它是如何工作的。

提前致谢。

【问题讨论】:

我建议为表单上的 Room 字段设置一个“Before_Update”事件。在那里你可以检查那个房间里是否还有其他人。当然,您可以在 Room 和 Active(或其他)表中添加一个复合键,并让 Access 将其吐出一个错误......但这对用户不太友好。 【参考方案1】:

感谢 Wayne 的回答,我制作了复合键,但注意到用户必须在表单中添加大量信息并按 Enter 键才能看到没有患者添加到列表中。这并没有真正让我得到我想要的东西,但它让我朝着正确的方向寻找......

我终于想出了一个代码,通过在查询结果上使用 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

【讨论】:

对不起,您尝试使用复合键时遇到了麻烦-我提到这是一个不该做的玩笑:(您可以考虑的另一个选择是使用组合框来允许用户选择房间号,并让源是列出所有“开放”房间的查询。

以上是关于消除链接到查询结果的重复表单条目的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE中的distinct消除重复行,我用where链接了多个表 查询了多个字段

检查重复条目与使用 PDO errorInfo 结果

Django Newbie - 使用多字段表单,如何消除查询集中的空字段

是否应该在运行 EM 记录链接算法之前删除重复条目?

我的网络表单没有链接到我的电子邮件 [重复]

从用户定义的函数中消除空查询结果