Удалите повторяющуюся запись формы, связанную с результатом запроса

Я новичок в VBA и Access, и у меня есть запрос к таблице, который в результате дает мне только активных пациентов из моей таблицы. Прикрепленная форма позволяет моим пользователям отлично вводить данные в таблицу.

Одним из полей для ввода данных в моей форме является номер комнаты, который не является уникальным полем по сравнению с данными в моей таблице. Однако в запросе это должно быть уникальным, поскольку в одной палате не может быть двух пациентов.

Есть ли способ запретить пользователям назначать двух активных пациентов с одним и тем же номером палаты, используя результат моего запроса? Я везде искал ответ, и самое близкое, что я нашел, это использование DlookUp, но я не уверен, как это может работать.

Заранее спасибо.


person Jim Bray    schedule 08.06.2017    source источник
comment
Я предлагаю событие «Before_Update» для поля «Комната» в вашей форме. Там вы можете проверить, есть ли еще кто-нибудь в этой комнате. Конечно, вы можете добавить составной ключ в свою таблицу Room и Active (или что-то еще), и Access выдаст его с ошибкой... но это не очень удобно для пользователя.   -  person Wayne G. Dunn    schedule 09.06.2017


Ответы (1)


Спасибо, Уэйн за ваш ответ, я сделал составной ключ, но заметил, что пользователю придется добавить много информации в форму и нажать 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
person Jim Bray    schedule 09.06.2017
comment
Извините, что вы потрудились попробовать составной ключ - я упомянул это как шутку о том, чего не делать :( Другой вариант, который вы могли бы рассмотреть, - это использовать поле со списком, чтобы позволить пользователю выбрать номер комнаты и иметь источником может быть запрос, в котором перечислены все «открытые» комнаты. - person Wayne G. Dunn; 09.06.2017