Doppelte Datensatz vermeiden

Hallo,
ich würde gerne meinen DS auf doppelte Eingaben prüfen.
Mein Code dafür:
Private Sub Charge_AfterUpdate()

’ auf doppelten FA prüfen

Dim strKrit As String

strKrit = „[FA-Nr]=’“ & Me![FA-Nr] & „’ " & _
„AND [Charge]=’“ & Me![Charge] & „’ "
If DCount(“*“, „tbl_FA_daten“, strKrit) > 0 Then
Select Case MsgBox(„FA schon vorhanden“)
End Select
Me.Undo
[FA-Nr].SetFocus

End If

End Sub

Wenn es sich um Textfelder in der Tabelle handelt funktioniert es, aber das Steuerelement ist als Zahl deklariert.
Was muß ich denn ändern, damit Steuerelemente mit Zahleninhalt geprüft werden? Ich verwende Access 2000.

Vielen Dank Euch
Markus

Hi,
und wenn du die Prüfung der Datenbank überlässt?

/t/doppelte-eintraege-vermeiden/6478679

Gruss
Joey

Hallo,

wenn doppelte Einträge schon existieren, wird die Index-Methode nicht ohne Weiteres funktionieren.

ich würde gerne meinen DS auf doppelte Eingaben prüfen.
Mein Code dafür:

Private Sub Charge_AfterUpdate()
Dim strKrit As String
strKrit = „[FA-Nr]=’“ & Me![FA-Nr] & „’ " & _
„AND [Charge]=’“ & Me![Charge] & „’ "
If DCount(“*“, „tbl_FA_daten“, strKrit) > 0 Then
Select Case MsgBox(„FA schon vorhanden“)
End Select
Me.Undo
[FA-Nr].SetFocus
End If

End Sub

Wenn es sich um Textfelder in der Tabelle handelt funktioniert
es, aber das Steuerelement ist als Zahl deklariert.
Was muß ich denn ändern, damit Steuerelemente mit Zahleninhalt
geprüft werden? Ich verwende Access 2000.

Das ist eine falsche Vorstellung der Datentypen:

Nur Felder (von VBA-Variablen/Funktionen jetzt mal abgesehen) in Tabellen können verschiedene Datentypen haben. Formular-Textfelder sind immer vom Typ Variant.

Insofern muß die Frage nach den Datentypen der Tabellenfelder gestellt werden.

Sind beide Tabellenfelder von Datentyp Zahl, Long, muß es so lauten (Hochkommata entfallen und für Sicherheit nz() verwenden):

–Select Case ist unnütz/sinnlos
–Bei Form-Steuerelementen „ME“ als Referenz auf das akt. Form(objekt) benutzen
–Besser Charge_BeforeUpdate einsetzen
– Auf Sonder - und Leerzeichen in (Objekt)Namen verzichten

Private Sub Charge_BeforeUpdate(Cancel as Integer)
Dim strKrit As String

strKrit = „[FA_Nr]=“ & nz(Me![FA_Nr],0) & _
" AND [Charge]=" & nz(Me![Charge],0)

If DCount("*", „tbl_FA_daten“, strKrit) > 0 Then
MsgBox „FA schon vorhanden“
Me.Undo
Cancel=true
Me![FA_Nr].SetFocus
End If

End Sub

Viele Grüße vom Bodensee
Franz, DF6GL

Hallo,
danke für die schnelle Antwort.
Wenn ich den Code so einsatze wie von dir beschrieben, bekomme ich folgende Fehlermeldung:

Sie müssen das Feld erst speichern, bevor Sie die GeheZuSteuerelement-Aktion, die GoToControl Methode oder die SetFocus-Methode ausführen können.

Habe den Code mal geändert und so funktioniert er ohne Meldung:

Private Sub Charge_BeforeUpdate()

’ auf doppelten FA prüfen

Dim strKrit As String

strKrit = „[FA-Nr]=“ & Me![FA-Nr] & " " & _
„AND [Charge]=“ & Me![Charge] & " "
If DCount("*", „tbl_FA_daten“, strKrit) > 0 Then
MsgBox („FA schon vorhanden“)
Me.Undo
Me![FA-Nr].SetFocus
End If

End Sub

Bin aber in Sachen VBA kein Profi und wäre schön, wenn du ihn dir noch einmal ansiehst und mir sagst, ob es so auch in Ordnung ist.

Vielen Dank
Markus

Hallo,

ja, den Setfocus hab ich nicht bedacht… Lass diese Zeile in meinem Code einfach weg.

Der Cursor bleibt im Feld „Charge“ stehen.

Ansonsten geht Dein Code auch, halt ohne die Berücksichtigung evtl. Fehler in Bezug auf die angegebenen Vorschlagspunkte.

Viele Grüße vom Bodensee
Franz, DF6GL

Hallo,

also, habe es noch einmal probiert.
Wenn ich „Charge“ After_Update() setzte, funktioniert es.
Aber mit Before_Update(Cancel as Integer) und der Anweisung Cancel=True funktioniert es nicht.

Grüße,Markus

Hallo Franz,

wenn doppelte Einträge schon existieren, wird die
Index-Methode nicht ohne Weiteres funktionieren.

Ein Grund mehr die Datenbank aufzuräumen!

ich würde gerne meinen DS auf doppelte Eingaben prüfen.
Mein Code dafür:

Der OP hat das wahrscheinlich nicht, aber im Mehrplatzbetrieb sind solche Lösungen grundsätzlich nicht zu gebrauchen wenn die Tabellen nicht vorher gelockt werden, was bei Access aber zu einem Bündel an anderen Problemen führt.

Empfehle immer noch die Index Methode.

Gruss
Joey

Hallo Joey,

natürlich hast Du Recht mit der Index-Methode, nur eben „der OP hat das wahrscheinlich nicht“ :wink: Und eine Datenbereinigung bei vorhandenen Datenkruscht macht m. Erf. nach eh keiner…

Andererseits kann eine Code-Prüfung VOR der Jet-Prüfung (da ist das Kind eigentlich schon ins Wasser gefallen) im Bedien-Ablauf durchaus von Vorteil sein…

Viele Grüße vom Bodensee
Franz, DF6GL