PDA

Vollständige Version anzeigen : Code für Duplikate erweitern, nur wie?


Biegel
11.07.2006, 09:22
Wie könnte ich den nachfolgenden Code anpassen, so dass ich auch weiterhin beim verlas-sen des Feldes eine Nachricht bekomme, dass diese Nummer schon vorhanden ist, aber dann auch zeitgleich die Daten von der vorhandenen Nummer im Formular eingeblendet werden?

Kurzfassung:

1. Doppelte BM Nummer eingegeben -> 2. Fehlermeldung erscheint beim verlassen -> 3. vorhandene Daten erscheinen dann im Formular

Vielleicht hat ja wer eine Idee....


Hier der jetzige Code:

Private Sub BM_Nummer_Exit(Cancel As Integer)
If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", _
"Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"
Cancel = True
Me![BM NUmmer].SetFocus
Exit Sub
End If
End If
End Sub

Liebe Grüße
Biegel

J_Eilers
11.07.2006, 09:28
Hi,

wie wäre es analog der FAQ 4.4 (http://www.donkarl.com/)?

Biegel
11.07.2006, 10:07
Hallo,

funktioniert leider nicht, da das Feld BM Nummer primär ist. Habe den Code mal ausprobiert, aber es werden kein vorhandener Datensatz angezeigt.

Es sollte die Fehlermeldung kommen (Code steht oben) + der doppelte Datensatz im Formular angezeigt weren.


Liebe Grüße
Biegel

J_Eilers
11.07.2006, 10:21
Hast du es denn auch so ausprobiert?

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"
Cancel = True
Me![BM NUmmer].SetFocus
rs.FindFirst "[BM NUmmer] = " & Me!BM_Nummer
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing

Biegel
11.07.2006, 10:36
Hallo,

danke erstmal für die schnellen Antworten.

Ja ich habe den gleichen Code genutzt, allerdings kommt in der ersten Zeile "Dim rs As DAO.Recordset" folgende Fehlermeldung: Benutzerdefinierter Typ nicht definiert.

Scheint wohl ein Fehler in der Variablen zu sein.

Hier noch mal der komplette Code:

Private Sub BM_Nummer_Exit(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"
Cancel = True
Me![BM NUmmer].SetFocus
rs.FindFirst "[BM NUmmer] = " & Me!BM_Nummer
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing


Liebe Grüße
Biegel

J_Eilers
11.07.2006, 10:42
Nö, nur in den Verweisen. Gehe mal in den VBA-Editor und dort auf Extras / Verweise, dann mache ein Häckchen bei Microsoft DAO 3.6 und schon sollte es funktionieren. Die Fehlermeldung hättest du auch vorher verraten können ;)

Biegel
11.07.2006, 11:23
Hallo,

so würde der Code gehen. Aber es kommt folgende Fehlermeldung:

"Die von ihnen vorgenommenen Änderungen konnten nicht vorgenommen werden [...] da Primärindex mehrfach vorkommende Werte enthalten würde. Ändern sie [...] damit doppelte Werte vorkommen dürfen.

Das Problem ist ja, das es sich um einen primär Schlüssel handelt, bei dem Feld Bedarfsnummer.



Private Sub BM_Nummer_Exit(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"
Cancel = True
Me![BM NUmmer].SetFocus
rs.FindFirst "Bedarfsnummer = " & Me!Bedarfsnummer
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing
End Sub

J_Eilers
11.07.2006, 11:57
Und so?

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"
Cancel = True
Me![BM NUmmer].SetFocus

DoCmd.RunCommand acCmdUndo
'Me.Undo

rs.FindFirst "[BM NUmmer] = " & Me!BM_Nummer
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing

Biegel
11.07.2006, 13:34
Hallo,

sorry aber geht noch immer nicht...

rs.FindFirst "Bedarfsnummer = " & Me!Bedarfsnummer

In der Zeile muss ein Fehler sein. "Fehlender Oparator in Ausdruck"

Ich weiss nicht woran es liegt, sieht erstmal richtig aus.....

J_Eilers
11.07.2006, 13:37
Warum heißt das Feld denn nun Bedarfsnummer und nicht mehr BM Nummer?

Biegel
11.07.2006, 14:28
Hallo,

also der Name des Feldes ist BM Nummer und die Tabellenspalte heisst Bedarfsnummer. (=Steuerelementinhalt)

Hab die Datenbank nie erstellt, modifiziere sie nur immer...


LG
Biegel

J_Eilers
12.07.2006, 06:10
rs.FindFirst "Bedarfsnummer = " & Me![BM Nummer]

Biegel
12.07.2006, 15:42
Halli Hallo,

habe nun schon alles probiert, aber irgendwie geht es leider nicht.

Nun ist es mir auch schon peinlich... Aber vielleicht hast ja noch einen Rat in der Tasche.


Liebe Grüße
Biegel

Anne Berg
12.07.2006, 15:53
Geht nicht - gibt's nicht! Wie lautet die Fehlermeldung? Ist die Nummer evtl. gar keine Nummer? Müssen also Hochkommata eingesetzt werden?

rs.FindFirst "Bedarfsnummer = '" & Me![BM Nummer] & "'"

Biegel
13.07.2006, 08:37
Guten Morgen,

also es kommt keine Fehlermeldung, der Code läuft ohne Probleme durch. Es kommt die Meldung, dass die Bedarfsnummer schon vorhanden ist aber der Datensatz wird nicht angezeigt.

Es handelt sich um eine Zahlt, der Ausdruck wäre ja somit schon richtig.

Name: BM Nummer
Steuerelementeinhalt: Bedarfsnummer
Tabellenname: Bedarfsmeldungstabelle

Liebe Grüße
Biegel

J_Eilers
13.07.2006, 09:12
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"
Cancel = True
Me![BM NUmmer].SetFocus

DoCmd.RunCommand acCmdUndo
'Me.Undo

rs.FindFirst "[BM NUmmer] = '" & Me!BM_Nummer & "'"
MsgBox rs.NoMatch
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing

Wird denn überhaupt eine Übereinstimmung gefunden?

Biegel
17.07.2006, 08:52
Hallo,

ja das mit der Übereinstimmung funktioniert Bestens. Dann kommt ein Klick auf den OK Button und mehr passiert dann nicht. Leider...


Liebe Grüsse
Biegel

J_Eilers
17.07.2006, 09:20
Und so?

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"

rs.FindFirst "[BM NUmmer] = '" & Me!BM_Nummer & "'"
MsgBox rs.NoMatch
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If

Cancel = True
Me![BM NUmmer].SetFocus

DoCmd.RunCommand acCmdUndo
'Me.Undo
Exit Sub
End If
End If

Set rs = Nothing

Biegel
17.07.2006, 11:04
Hallo,

nun kommt die Meldung:

1. Dupplikat
2. falsch
3. "Die von ihnen vorgenommenen Änderungen konnten nicht vorgenommen werden [...] da Primärindex mehrfach vorkommende Werte enthalten würde. Ändern sie [...] damit doppelte Werte vorkommen dürfen.

Debugger startet und der Fehler ist nun in dieser Zeile: Me.Bookmark = rs.Bookmark

LG Biegel

P.s.: Ich glaube es ist aussichtslos, oder? Vielleicht liegt es an daran, dass dieses Feld einen Primärschlüssel hat??

J_Eilers
17.07.2006, 11:31
Hmm, letzter Versuch:

Dim rs As DAO.Recordset
Dim x As String
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"

x = Me!BM_Nummer
Cancel = True
Me![BM NUmmer].SetFocus

DoCmd.RunCommand acCmdUndo
'Me.Undo

rs.FindFirst "[BM NUmmer] = '" & Me!BM_Nummer & "'"
MsgBox rs.NoMatch
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing

J_Eilers
17.07.2006, 11:41
Hmm, letzter Versuch:

Dim rs As DAO.Recordset
Dim x As String
Set rs = Me.RecordsetClone

If Me![BM NUmmer] <> Nz(Me![BM NUmmer].OldValue) Then
If DCount("*", "Bedarfsmeldungstabelle", "Bedarfsnummer = " & Me![BM NUmmer]) > 0 Then
MsgBox "Die Bedarfsnummer " & Me![BM NUmmer] & " gibt es bereits.", vbOKOnly, "Duplikat!"

x = Me!BM_Nummer
Cancel = True
Me![BM NUmmer].SetFocus

DoCmd.RunCommand acCmdUndo
'Me.Undo

rs.FindFirst "[BM NUmmer] = '" & x & "'"
MsgBox rs.NoMatch
If Not rs.NoMatch Then
Me.Bookmark = rs.Bookmark
End If
Exit Sub
End If
End If

Set rs = Nothing

Anne Berg
17.07.2006, 13:01
Mit einer kleinen Korrektur sollte es nun (endlich und wirklich) funktionieren: ;)
rs.FindFirst "Bedarfsnummer = " & x

J_Eilers
17.07.2006, 13:11
@Anne Wenn die Nummer immer noch ein String ist, sollte es doch richtig sein. :confused:

Biegel
17.07.2006, 13:11
Hallo Leute,

es klappt wirklich. Es kommt zwar immer eine zweite Messagebox mit dem Ausdruck "falsch", aber ich denke mal das man damit Leben kann.

Habt vielen Dank für Eure Hilfe und Geduld!!


LG Biegel

Anne Berg
17.07.2006, 13:16
@Jan: dann muss das aber im DCount ebenso geschrieben werden.

@Biegel: woher kommt denn diese Meldung, wo steht die MsgBox?!

... alles klar - Nomatch! Die musst du nun (nachdem alles läuft) natürlich wieder rausnehmen!! :p


Also da muss ich jetzt aber mal wieder etwas loswerden:
Wie kann man nur dermaßen blind vorgekauten Code übernehmen, ohne wenigstens den Versuch zu unternehmen, zu verstehen was da abläuft! :entsetzt:

Biegel
17.07.2006, 13:39
Hallo Anne,

super, stimmt mit der MsgBox da hätte ich auh alleine drauf kommen können.

Also im Moment verstehe ich noch nicht so viel von VBA, aber ich ich bin auf dem besten Wege es zu lernen. Access kenne ich soweit und nun geht es mit den Grundlagen VBA los.

Liebe Grüsse
Biegel