Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: ricco am August 16, 2020, 21:07:00

Titel: Duplikatsuche im Eingabeformular
Beitrag von: ricco am August 16, 2020, 21:07:00
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
Titel: Re: Duplikatsuche im Eingabeformular
Beitrag von: DF6GL am August 17, 2020, 08:24:25
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

Titel: Re: Duplikatsuche im Eingabeformular
Beitrag von: ricco am August 17, 2020, 13:07:08
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
Titel: Re: Duplikatsuche im Eingabeformular
Beitrag von: Beaker s.a. am August 17, 2020, 14:48:11
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
Titel: Re: Duplikatsuche im Eingabeformular
Beitrag von: DF6GL am August 17, 2020, 16:06:00
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.



Titel: Re: Duplikatsuche im Eingabeformular
Beitrag von: ricco am August 17, 2020, 19:04:25
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