Hallo zusammen
Bin neu im Forum und habe mit VBA leider nicht viel am Hut. Habe ein Formular für die Eingabe von Rezept-Zutaten in dem ich doppelte Einträge verhindern möchte. Das Feld "ZutatenBezeichnung" habe ich indiziert (ohne Duplikate) und im Ereignis "Bei Fehler" des Formulars "Zutatenerfassung" folgenden Code eingegeben (diesen habe ich in einem Forum gefunden):
Private Sub Form_Error(DataErr As Integer, Response As Integer) 'Überprüfung auf doppelte Datensätze
Me!ZutatenBezeichnung.SetFocus
If DataErr = 3022 Then
Response = acDataErrContinue
MsgBox Me!ZutatenBezeichnung & "! Diese Zutat gibt es bereits.", vbOKOnly, "Duplikat!"
Me!ZutatenBezeichnung.SetFocus
ZutatenBezeichnung = ""
Me!ZutatenBezeichnung.SetFocus
End If
End Sub
Das ganze fünktioniert aber nur wenn ich mit der Maus in einen anderen Datensatz klicke, dann wird die Prüfung ausgelöst.
Kann mir jemand helfen, wie die Kontrolle mit einem "Return" oder einer Schaltfläche auslöse?
Zusatzinfo:
Neue Datensätze erstelle ich mittels:
Private Sub Befehl11_Click() 'Neue Zutat erfassen
Me.AllowAdditions = True
DoCmd.RunCommand acCmdRecordsGoToNew
ZutatenNeu = "Neu"
DoCmd.RunCommand acCmdSaveRecord
Me.AllowAdditions = False
End Sub
Für Hilfe bin ich sehr dankbar
Mit freundlichen Grüssen
Ricco
Hallo,
es kann das Ereignis "Vor Aktualisierung" des Textfeldes genutzt werden, um auf einen schon vorhandenen DS zu prüfen. Alternativ ist das Form-Ereignis "Vor Aktualisierung" geeignet.
Sub Zutatenbezeichnung_BeforeUpdate(Cancel as Integer)
If Dcount("*", "tbl_MeineTabelle","Zutatenbezeichung = '" & Me!Zutatenbezeichnung & "'") > 0 Then
Msgbox "So nicht!"
Cancel =True
End If
End Sub
Hallo Franz
Herzlichen Dank für die schnelle Unterstützung. Leider konnte ich das nicht zum funktionieren bringen. Habe den Code im Eingabeformular eingegeben:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If DCount("*", "tblZutaten", "ZutatenBezeichung = '" & Me!ZutatenBezeichnung & "'") > 0 Then
MsgBox "so nicht"
Cancel = True
End If
End Sub
Habe verschiedene Varianten, unter anderem den Tabellennamen durch den Formularnamen ersetzt. Funktioniert mit meiner Unkenntnis auf keine Weise. Bereits beim Erstellen von einem neuen Datensatz erscheint die Meldung "laufzeitfehler 2471". Was mache ich falsch.
Gruss und herzlichen Dank
Ricco
Hallo Ricco,
Klartextvergleiche machen mich in so einem Zusammenhang immer
stutzig. Haben deine Zutaten keine ID (Primärschlüssel)? Und
steht dieser nicht als Fremdschlüssel (FK) in einer n:m-Tabelle
zusammen mit einem FK auf das Rezept?
Wenn du das so hast (solltest du), dann genügt normalerweise ein
eindeutiger Mehrfelderindex auf diese beiden FK. Dann bekommst
du autom. eine Fehlermeldung von Access (bzw. der JET-Engine).
gruss ekkehard
Hallo,
vermutlich wirfst Du Feldnamen durcheinander:
Wie heißt das Feld denn in der Tabelle?
ZutatenBezeichung
oder
ZutatenNeu ?
Zudem ist
ZutatenNeu = "Neu"
so zu schreiben:
Me!ZutatenNeu = "Neu"
falls es sich bei "ZutatenNeu" um ein Textfeld mit diesem Namen im Formular handelt, das an ein Tabellenfeld (Name?) gebunden ist.
Der Hinweis von Ekkehard ist insgesamt zielführender.
Hallo zusammen
Ich stelle fest, dass ich mich noch sehr viel tiefer mit der Materie befassen muss, verstehe das mitgeteilte noch nicht. Werde versuchen aus eurer Hilfe zu lernen und werde mich sicher später wieder mit Anliegen melden.
Herzlichen Dank!
Mit freundlichen Grüssen
Ricco