2016-07-25 14 views
1

Ich habe eine Datenbank in Access 2010, wo das 1. Feld eine eindeutige Mitgliedsnummer ist. Das Feld ist Indiziert, keine Duplikate. Wenn ein Duplikat auf dem Eingabeformular eingegeben wird, wird keine Fehlermeldung angezeigt und nichts anderes funktioniert, bis eine eindeutige Nummer eingegeben wird. Ich benötige den Code, der den Fehler im Nummernfeld auffängt und den Fokus verliert, so dass ein Meldungsfeld den Benutzer über das Problem informiert und dann den Fokus zurück auf das Zahlenfeld setzt oder den Benutzer alle Eingaben abbrechen lässt. Diese ist das, was ich habe, und es verursacht Datentyp FehlerEindeutige Mitgliedsnummer in Access-Datenbank

Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) 
    If DLookup(Str("[Grumpy_No]"), "Grumpy", Str("[Grumpy_No]") = Me!Str(Grumpy_No)) Then 
    MsgBox "Number has already been entered in the database." 
    Cancel = True 
    Me!Grumpy_No.Undo 
    End If 
End Sub 

Irgendwelche Hinweise darauf, wo ich falsch werde sehr geschätzt werden würde

+1

Klingt, als ob Sie nach dem [TextBox.BeforeUpdate Event] fragen (https://msdn.microsoft.com/en-us/library/office/ff845199.aspx) – HansUp

+0

Sorry, ein Schmerz zu sein, aber ich bin ziemlich Neu bei Access. Ich kann sehen, dass Sie mit BeforeUpdate Event recht haben, aber es scheint nur mit Zeichenfeldern arbeiten zu wollen, die keine Ganzzahl sind. Ich habe versucht, die STR() -Funktion, aber immer erhalten Datentyp Fehler. Ich sollte erklären, mein Club ist ein Motorradclub namens "Grumpy Old Bastards" der Tisch ist "Grumpy" und das Feld ist "Grumpy_No", was ein Integer ist. –

+0

Das ist, was ich habe: - Private Sub Grumpy_No_BeforeUpdate (Abbrechen als Integer) Wenn DLookup (Str ("[Grumpy_No]"), "Grumpy", Str ("[Grumpy_No]") = Ich! Str (Grumpy_No)) Dann MsgBox "Die Nummer wurde bereits in der Datenbank eingegeben." Abbrechen = True Me! Grumpy_No.Undo End If End Sub Irgendwelche Hinweise darauf, wo ich falsch werde würde sehr geschätzt. –

Antwort

2

mir Sieht aus wie Sie in die richtige Richtung, aber sie müssen Ihren DLookup Ausdruck beheben. Das dritte Argument muss eine einzelne Zeichenfolge sein. Ich sehe nicht, warum Str() ist nützlich --- nur eine Zeichenfolge erstellen. Eigentlich würde ich DCount anstelle von DLookup verwenden, aber dann gelten die gleichen Probleme immer noch.

Private Sub Grumpy_No_BeforeUpdate(Cancel As Integer) 
    If DCount("[Grumpy_No]", "Grumpy", "[Grumpy_No] = " & Me!Grumpy_No.Value) > 0 Then 
     MsgBox "Number has already been entered in the database." 
     Cancel = True 
     'Me!Grumpy_No.Undo '<- consider allowing the user to see the value which failed 
    End If 
End Sub 

Hinweis, wenn Sie Grumpy_No ein Autoprimärschlüssel machen kann, wird der Zugriff automatisch eindeutige Werte liefern, so dass Sie nicht Ihren eigenen Code brauchen, um diese Werte zu überprüfen.

+1

Genau das, was ich HansUp brauchte ich jetzt dieses Private Sub Grumpy_No_BeforeUpdate haben (Cancel As Integer) Dim NewNum As String NewNum = Str (Me! Grumpy_No.Value) Wenn Sie mich! Grumpy_No.Value> 0 Then Wenn DCount ("[Grumpy_No]", "Grumpy", "[Grumpy_No] =" & Ich! Grumpy_No.Value)> 0 Dann MsgBox "Grumpy Number" + NewNum + "wurde bereits in der Datenbank eingetragen." Abbrechen = True Me! End 'Grumpy_No.Undo Wenn End If End Sub –

+0

Das einzige Problem ist jetzt, dass nach läuft es die Routine (die nur funktioniert, wie ich es wollte) jetzt habe ich eine Access-Fehlermeldung "Der Wert verletzt die Validierungsregel für das Feld oder den Datensatz" Ich dachte, es könnten die No-Duplikate in der Tabelle sein, also habe ich es in Duplicates geändert, aber ich erhalte immer noch den Fehler. Ich kann nirgendwo sonst Validierungsregeln finden. –

+0

Nüsse! Das ist ein anderes Problem, Ray. Und ich vermute, dass das Problem unabhängig vom Formular ist, sodass Sie den gleichen Fehler erhalten würden, wenn Sie versuchen, der Tabelle eine neue Zeile hinzuzufügen, wenn sie in der Datenblattansicht geöffnet ist. Ich denke, Sie sollten jetzt eine neue Frage einreichen, die das aktuelle Problem beschreibt. – HansUp