2017-06-08 1 views
0

Ich bin neu in VBA und Access und ich habe eine Abfrage auf eine Tabelle, die mir nur die aktiven Patienten aus meiner Tabelle als Ergebnis gibt. Das angehängte Formular ermöglicht es meinen Benutzern, Daten in die Tabelle perfekt einzugeben.Erledigen Doppelte Formulareintrag verknüpft mit Abfrageergebnis

Eines der Felder für die Dateneingabe auf meinem Formular ist die Raumnummer, die kein eindeutiges Feld ist, soweit die Daten in meiner Tabelle. Bei der Abfrage muss dies jedoch eindeutig sein, da nicht zwei Patienten einem Raum zugeordnet werden können.

Gibt es eine Möglichkeit, Benutzer daran zu hindern, zwei aktive Patienten mit derselben Raumnummer anhand meines Abfrageergebnisses zuzuweisen? Ich habe überall nach einer Antwort gesucht und das nächste, was ich gefunden habe, war DlookUp, aber ich bin mir nicht sicher, wie das funktionieren könnte.

Vielen Dank im Voraus.

+0

Ich schlage ein Ereignis 'Before_Update' für das Feld Zimmer auf Ihrem Formular vor. Dort könntest du nachsehen, ob noch jemand in diesem Raum ist. Natürlich könnten Sie einen Compound-Schlüssel zu Ihrer Tabelle von Room und Active (oder was auch immer) hinzufügen und Access spucken es mit einem Fehler aus ... aber das ist nicht sehr benutzerfreundlich. –

Antwort

0

Dank Wayne für Ihre Antwort, machte ich den Compound-Schlüssel, aber bemerkte, dass der Benutzer viele Informationen in das Formular hinzufügen und drücken Sie die Eingabetaste nur um zu sehen, dass kein Patient der Liste hinzugefügt. Das hat mich nicht richtig verstanden, aber ich habe in die richtige Richtung geschaut ...

Ich kam schließlich mit einem Code, um die Zimmernummern zu finden, die in das Formular eingegeben wurden, indem ich Dcount für das Abfrageergebnis verwendete und habe diesen Code in das onExit-Ereignis der Raumnummer platziert, sodass ich den Fokus zurück an das Feld senden konnte, bis die richtige Antwort vom Benutzer gesendet wurde.

Ich hatte bereits die Feldvalidierung eingestellt, um sicherzustellen, dass der korrekte Bereich der Raumnummern eingegeben wurde. Dies hat nun das Potenzial, den Benutzer in einer Endlosschleife stecken zu lassen. Also, ich muss eine weitere if-Anweisung zu der Fehlermeldung hinzufügen, um den Benutzer aus der Schleife zu senden, wenn sie einfach nicht an eine leere Raumnummer denken kann, die in das Feld eingefügt werden soll.

Wie auch immer, hier ist die Lösung, die ich mir ausgedacht habe. Als erstes habe ich ein weiteres Textfeld "Me.txtResult" zu meinem Formular hinzugefügt, um die Ergebnisse von Dcount zu sehen, die jetzt nicht wirklich notwendig sind. Allerdings ist es in dem Code, also dachte ich, ich sollte diesen Teil erklären.

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 
+0

Entschuldigen Sie, dass Sie sich die Mühe gemacht haben, den Compound-Key auszuprobieren - ich erwähnte das als einen Witz dessen, was Sie nicht tun sollten :(Eine andere Option, die Sie in Betracht ziehen könnten, wäre die Verwendung einer ComboBox, um dem Benutzer die Auswahl einer Zimmernummer zu ermöglichen Die Quelle muss eine Abfrage sein, die alle offenen Räume auflistet. –

Verwandte Themen