Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Gültigkeitsregel für nicht doppelte Kundennummern

Begonnen von Accessfreund, Oktober 06, 2010, 14:58:08

⏪ vorheriges - nächstes ⏩

Accessfreund

Hallo ihr alle zusammen!
ich habe ein riesen Problem, ok sonst wäre ich nicht hier.

Wir haben eine Firma, und mein Mann hat Kundenkarten mit den Kundennummern darauf.
Wenn er einen neuen Kunden bekommt füllt er die Vorgefertiget (mit Kundennummer)  Karte aus.
Ich gebe dann die Kundennummer und die Adressdaten in meine DB ein.
Jetzt ist ein Jahr rum und die Kundenkarten kommen vom Vorjahr kommen wieder,
aber es kommen auch neue Kundenkarte dazu. Damit ich nicht ausversehen einen alten
Kunden als neuen anlege kann
(ich weiß es steht ja alles auf der Kundenkarte, aber ich lerne gerade eine Praktikantin
an und die paßt da noch nicht so auf).
Ich möchte eine Gültigkeitsregel erstellen und eine Gültigkeitsmeldung "Kundennummer schon vergeben".
Ich weiß keinen Rat mehr ich habe den Index schon auf "JA-ohne Duplikate gestellt aber ich kann eine neue Nummer
vergeben aber nicht speichern.
Das ist ja nicht das Problem, es geht Zeit verloren wenn Sie alles eingibt und danach merkt dass es falsch ist.

Kann mir jemand helfen, ohne dass ich alles nochmal erstellen muss (Formal)

LG
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

DF6GL

Hallo,

Wie wo und wann geanu gibst Du (bzw. die Praktikantin) die Kundennummer ein?

Benutzt Du ein Formular?

(und warum "kommt eine Karte aus dem Vorjahr wieder"  ??? )



Wenn Du ein Formular benutzt (was Du dringend machen solltest) , dann kannst Du eine Prozedur für das Beforeupdate-Ereignis des Kundennummer-Feldes schreiben:


Sub Kdnr_BeforeUpdate(Cancel as Integer)
If nz(dlookup("Kdnr","tblKunden","Kdnr=" & Me!Kdnr),0) = Me!Kdnr then
Msgbox "Kundennummer gibt es schon"
Cancel=true
Me.Undo
End If
End Sub

Accessfreund

Hallo
Wie meinst du die Frage wie und wann?
Der Kunde wird jedes Jahr angefahren und es kommen jedes Jahr neue Daten hinzu:
Rechungsdatum, Rechnungsnummer und Betrag
Ich gebe alles in einem Formular ein (ist ja einfacher wenn man es mal erstellt hat)

Obiges, die Rechnungsdaten werden in einem Unterformular eingegeben.

Wo gebe ich denn das Beforeupdate-Ereignis ein, habe keine vorstellung wo das sein soll.
Ich benutze Access 2007

Danke schon mal für die Hilfe
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

DF6GL

Hallo,

mhmm, ja,  bin geneigt zu empfehlen, dass Du Dich zunächst etwas mehr mit den Access-Grundlagen beschäftigst...

Wenn das Ganze zufriedenstellend laufen soll, dann ist die Kenntnis der Ereignisse und der damit verbundenen Ereignisprozedur-Erstellung von grundlegender Bedeutung.


Geh in die Form-Entwurfsansicht und markiere das Kundennummer-Feld, das das erste im Form sein sollte, in das Daten eingegeben werden können.


Im Fenster Eigenschaften/Ereignisse klick auf die rechts der Zeile "Vor Aktualisierung" stehenden 3 Pünktchen. Der VBA-Editor öffnet sich mit dem vorbereiteten Prozedurgerüst (Sub....  End Sub)

Dort trägst Du nun die restlichen Codezeilen ein.


Accessfreund

Hallo
hab ich gemacht, ich habe den Code von Dir zwischen (Sub....  End Sub)gesetz, aber es funktioniert nicht.  Es kommt:
Microsofr Visual Basic
Fehler beim Kompilieren
End Sub erwartet

Und der VBA-Editor öffnet sich wieder

Ich habe Access in der Euroschule (ist auch schon 7 Jahre her) gehabt und komme gut damit zu recht. Ok mit den Codes nicht aber wann brauche ich die schon.

Ich habe meine Tabellen erstellt die ich brauche und das Formular, funktioniert ja alles bis auf das.

Wie sieht es mit Gültigkeitsregeln aus, könnte nicht das funktionieren?
Oder was habe ich falsch gemacht?

Gruß
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

Accessfreund

Hallo nochmal hier das was im VBA Editor steht


Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
Sub Kdnr_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("Kdnr", "tblKunden", "Kdnr=" & Me!Kdnr), 0) = Me!Kdnr Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub

Gruß
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

database

Hallo,


ZitatOk mit den Codes nicht aber wann brauche ich die schon.
;) Jetzt zum Beispiel - und zwar dringend  ;)

Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
Sub Kdnr_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("Kdnr", "tblKunden", "Kdnr=" & Me!Kdnr), 0) = Me!Kdnr Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub


nimm die oben ausgestrichene Zeile aus deinem Code, dann sollte es laufen

Grüße
Peter

DF6GL

HAllo,


eher:

Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("Kundennummer", "tblKunden", "Kundennummer=" & Me!Kundennummer), 0) = Me!Kundennummer Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub


Wenn das Feld in der Tabelle "tblKunden" auch "Kundennummer" heißt.


Accessfreund

Hallo Ihr zwei,

Laufzeitfehler "3078"
Das Microsoft Office-Datenbankmodul findet die Eingabetabelle oder Abfrage "tblKunden" nicht. Stellen Sie sicher, dass sie vorhanden ist und der Name richtig eingegeben wurde.

Nun meine Tabellen und Formulare:

Tabellen:
Kunden: Tabelle
Rechnungen Tabelle
Auswahlliste: Tabelle

Formulare:
Kunden
Rechnungen Unterformular

Abfragen:
Rechnungen Abfrage1

Das sind meine Tabellen und das Feld im Formular das ich ändern möchte ist:
Im Formular - Kunden
Kundennummer aus der Tabelle - Kunden

Hoffe ich konnte euch genügend Infos geben.

Gruß
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

DF6GL

Hallo,

also, wenn Du die Fehlermeldung (und auch den letzten Satz in meinem letzten Posting) mal richtig liest, dann solltest Du selber den Fehler beheben können...


Weiterhin kann ich nicht erkennen, WIE GENAU die Tabellen und Formulare nun heißen...

Tabellen:
Kunden: Tabelle   heißt das Ding  wirklich so??
Rechnungen Tabelle
Auswahlliste: Tabelle



Wie schon an anderer Stelle heute schon gesagt, ist auf Sonderzeichen und Leerzeichen sowie auf die Verwendung reservierter Wörter DRINGENDS zu verzichten.

http://www.access-o-mania.de/forum/index.php?topic=13176.0

Accessfreund

Hallo,

ich habe nur den Namen Kunden vergeben das steht so in der linken Leiste.

Gruß
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

DF6GL

ok,

egal wie auch immer, Du mußt tblKunden im Code durch den richtigen Namen Deiner Kundentabelle ersetzen, der vermutlich KUNDEN lautet...

Accessfreund

Hallo,

soweit so gut es funktioniert er gibt mir an, dass die Kundennummer schon gibt.
Aber

er sagt mir das auch wenn ich eine neue Nummer eingeben möchte die es noch nicht gibt
???????

Was fehlt noch?

Gruß
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby

DF6GL

Hallo,

poste nochmal Deinen Code  (mit Copy&paste).

Welchen Datentyp hat die Kundennummer?


Wenn Kundennummer in der Tabelle vom Datentyp TEXT ist:


If Nz(DLookup("Kundennummer", "Kunden", "Kundennummer='" & Me!Kundennummer & "'"), "") = Me!Kundennummer Then

Alternativ ginge auch (bei TEXT)
If Dcount("*", "Kunden", "Kundennummer='" & Me!Kundennummer & "'" )   > 0 Then

Accessfreund

Hay

Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("Kundennummer", "Kunden", "Kundennummer=" & Me!Kundennummer), 0) = Me!Kundennummer Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub

Habe Deine beiden Codes benutz kommt trotzdem
"Kundennummer schon vergeben"
wenn ich eine neue Eingebe die es noch nicht gibt.

In der Tabelle ist Felddatentyp: Zahl
Im Formular steht bei Textformat: Nur Text

Gruß
Gaby
Der Computer ist nur so schlau wie der, der ihn bedient :-)
Liebe Grüße Gaby