Ich hoffe, das ist eine einfache Frage für jemanden. Ich habe diese Methode, die zwei Formularfelder verwendet, um zu überprüfen, ob ein Datensatz in meiner Tabelle vorhanden ist und entweder einen Datensatz hinzufügt oder nichts tut. Wenn also patient_id 100 ist und visit_number 1, dann füge ich nur einen neuen Datensatz hinzu, wenn dieser noch nicht existiert.Zugriff, VBA: Find First funktioniert nicht richtig
Wenn also rst.NoMatch wahr ist, fügen Sie einen neuen Datensatz hinzu. Ich kann es jedoch nicht erkennen, ein Duplikat zu erkennen. Hier ist der Code:
Private Sub add_record_button_Click()
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
Dim dbs As DAO.Database
Set dbs = CurrentDb
If IsNull(Form.patient_id) Or IsNull(Form.visit_number) = True Then
MsgBox "Please fill in both fields."
Else
rst.FindFirst "[patient_id] = " & Form.patient_id & " And [visit_number] = " & Form.visit_number
If rst.NoMatch Then
Set rst = dbs.OpenRecordset("Visits")
rst.AddNew
rst!patient_id = Form.patient_id
rst!visit_number = Form.visit_number
rst.Update
MsgBox "New patient visit has been added to the database."
Else
MsgBox "That visit already exists."
End If
rst.Close
End If
End Sub
Ich glaube, dass meine FindFirst-Zeile nicht korrekt ist. In der Datenbank haben die Variablen den Namen patient_id und visit_number. Auf dem Formular sind sie gleich benannt.
Jede Hilfe wäre dankbar, danke.
BEARBEITEN.
Von den Kommentaren unten konnte ich meine Logik arbeiten, aber mit einem anderen vergleichen Feature, Dlookup.
IsNull(DLookup("[patient_id]", "MyTable", "[patient_id] = " & Forms("MyForm").patient_id & " AND [visit_number] = " & Forms("MyForm").visit_number)
FINAL EDIT.
Die obige Zeile machte alles funktioniert, wenn ich das Formular direkt verwendet, aber wenn ich das Formular in ein Navigationsformular legte - es funktioniert nicht mehr. Die Zeichenfolge, die schließlich wurde es aus einer Navigations Form arbeitet wie folgt aussehen:
If IsNull(DLookup("[patient_id]", "Visits", "[patient_id] = " & Me!patient_id.Value & " AND [visit_number] = " & Me!visit_number.Value)) = True Then
Vielen Dank für Ihre Hilfe.
ein numerisches Feld in der DB ist patient_id? –
@ A.S.H Ja, ich habe es auf "Nummer" –
Ich habe nichts falsch mit Ihrem Code gefunden. Ist Ihr 'RecordsetClone' ein" Tisch "Recordset? –