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
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
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
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.
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
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
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
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.
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
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
Hallo,
ich habe nur den Namen Kunden vergeben das steht so in der linken Leiste.
Gruß
Gaby
ok,
egal wie auch immer, Du mußt tblKunden im Code durch den richtigen Namen Deiner Kundentabelle ersetzen, der vermutlich KUNDEN lautet...
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
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
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
Hallo,
""Kundennummer schon vergeben" ist aber nicht die Reaktion über die Msgbox ...
wirf die Gültigkeitsregel in der Tabelle (oder wo sie sonst steht) mal raus.
Hallo zusammen,
warum nicht einfach die Kundennummer indizieren (ohne Duplikate). Im Ereignis "Bei Fehler" des Formulars dann eine eigene Fehlermeldung und fertig ist die Laube. ;D
Hallo,
sorry mein Fehler beim schreiben, bin schon ganz meschucke
Es steht da natürlich "Kundennummer gibt es schon" also die reaktion über die Msgbox
Sorry nochmal
Aber ein Fehler ist noch drin oder ich hab was vergessen.
Wenn ich eine neue Kundennummer eingebe die noch nicht in der Tabelle steht kommt die Meldung auch
"Kundennummer gibt es schon" was aber nicht möglich ist.
Gruß
Gaby
Hallo,
wie bereits gesagt, funktioniert das auch ohne VBA wenn das Feld in der Tabelle direkt indiziert (ohne Duplikate) wird.
Es wird dann nur eine Zeile VBA für eine eigene Fehlermeldung gebraucht.
Hay,
ich habe eine indizierung "Ja ohne Duplikate" und ich kann trotzdem doppelte nummern eingeben.
Gruß
Gaby
@MzKlMu
Hallo Klaus, da hast du zweifelsohne recht, aber kommt hierbei die Reaktion (Form_Error(DataErr As...) ) nicht erst beim Verlassen des aktuellen Datensatzes, also z.B. wenn auf einen weiteren neuen gewechselt wird?
Bei vielen Eingaben Pro Datensatz kommt mir die Reaktion ein wenig spät vor, möglicherweise werden so in 20 Feldern Eingaben gemacht, die gar nicht benötigt worden wären.
@Gaby
Zitat"Kundennummer gibt es schon" was aber nicht möglich ist.
Das kann ja nicht wahr sein - was ist da los?
Wenn du die Zahlenvariante ohne Erfolg getestet hast und die Textvarianten nach DF6GL bringen auch keine Lösung .... bin sprachlos
Zitatich habe eine indizierung "Ja ohne Duplikate" und ich kann trotzdem doppelte nummern eingeben
...und jetzt wirds elektrisch ...
Dann ist dein Feld entweder ungebunden oder aber an ein anderes Tabellenfeld gebunden!
So was ist schlichtweg unmöglich!
Grüße
Peter
Hallo,
Zitatich habe eine indizierung "Ja ohne Duplikate" und ich kann trotzdem doppelte nummern eingeben.
Das halte ich für absolut ausgeschlossen. Bitte prüfe das mal, ob
das Feld mit der Kundennummer in der Tabelle auf indiziert (ohne Duplikate) steht. Ich halte jede Wette, das es nicht ist.
Hallo,
ZitatBei vielen Eingaben Pro Datensatz kommt mir die Reaktion ein wenig spät vor, möglicherweise werden so in 20 Feldern Eingaben gemacht, die gar nicht benötigt worden wären.
@database
Da hast Du zweifellos recht, die vorherige Prüfung wäre besser.
Ich bin jetzt nur mal gespannt, wie das mit der Indizierung aussieht.
Und wenn das Feld ungebunden ist, wird das Schreiben des Feldes in die Tabelle auch
zuverlässig verhindert.
@MzKlMu
" Und wenn das Feld ungebunden ist, wird das Schreiben des Feldes in die Tabelle auch zuverlässig verhindert "
Wogegenen ich mich auch nicht wehre! ;D ;D ;D
So ich versuche mal ein Bild davon hoch zu laden
Da kann man sehen, dass Indizierung "Ja ohne Duplikate" ist.
Und es muss gebunden sein, da ja auch alle Kundennummer die ich im
Formular eingegeben habe in der Tabelle Kunden aufgenommen werden.
Schön mit allem was ich im Formular eingebe samt Unterformular es ist alles da.
Meint Ihr mit ungebunden, das es mit keiner Tabelle verbunden ist und somit nirgends auftaucht?
Ich benutze genau heute die Tabellen 1 Jahr, deshalb brauche ich ja die änderung.
Gruß
Gaby
[Anhang gelöscht durch Administrator]
Hallo,
ja mei, mich reißt es aus den Socken... :o :o ::)
Das Tabellenfeld heißt wirklich
Kundennr:
und alle Hinweise auf Überprüfung von Namen und Vermeidung von Sonder-/Leerzeichen verpuffen im Nirwana...
Ich klinke mich aus und geh jetzt ins Bett... Gute Nacht. 8)
Hallo,
hier noch Bilder von den Tabellen, wo alle Daten vom Formular hin laufen
und vom Code nochmal
Gute Nacht vielleicht hat jemand von Euch heute Nacht eine eingebung.
Tschau
[Anhang gelöscht durch Administrator]
Hallo,
eigentlich hättest Du nach dem Hinweis von Franz die Eingebung haben müssen.
Das Feld heist nicht Kundennummer sondern Kundennr: (mit Doppelpunkt).
In welches Feld schreibstDu denn den Wert?
Ein Feld Kundennummer gibt es jedenfalls nicht.
Und in Kundennr: kannst Du unmöglich einen doppelten Wert haben, bzw. erfassen. Wie bereits gesagt.
Na Guten Morgen,
wie das Tabellenfeld nun heißt, haben wir endlich rausbekommen - stellt sich jetzt noch die Frage, wie das Formularfeld heißt in welches du schreibst!
Schau da mal im Formularentwurf nach
Feld anklicken
Feldeigenschaften anzeigen lassen
Register 'Andere'
was steht neben Name?
So wie die Einstellungen in der Tabelle lauten (Indiziert Ja Duplikate nein) ist das schon in Ordnung, da kann man keine Nummern doppelt abspeichern - eingeben sehr wohl, Access motzt dann erst beim Verlassen des aktuellen Datensatzes, dass die Nummer schon existiert. Zwischen Eingeben und Speichern besteht zum Glück ein riesen Unterschied.
Zu dem Zweck hat Franz ja den Code für das BeforeUpdate-Ereignis des Feldes vorgeschlagen, in dem du die Kundennummer erfasst.
Jetzt stellt sich heraus, dass das zugrundeliegende Tabellenfeld ja ganz anders heißt als du angegeben hast daher kann der Code auch nicht greifen. :-\
Bevor jetzt irgendwer eine Änderung in den Code einbringt wäre es echt günstig uns mit der Wahrheit über den FORMULARFELD-NAMEN zu versorgen!
Guten Morgen,
Da steht "Kundennummer", nur wo kommt das her?
In der Tabelle wo die Daten gespeichert werden steht "Kundennr:"
Ich habe das Feld aus der Tabelle KUNDEN entnommen und da werden auch die Daten gespeichert.
Gruß
Gaby
[Anhang gelöscht durch Administrator]
Hallo,
ich kann auf Deinen Bildern nirgends ein Feld "Kundennummer" endecken.
Kannst Du mal verraten, wo Du ein solches Feld siehst?
Hay,
Bild 3:
Formularentwurf
Feld anklicken
Feldeigenschaften anzeigen lassen
Register 'Andere'
was steht neben Name? KUNDENNUMMER
Bei mir steht auf Bild 4 zu sehen ist Kundennumme, ich habe das da aber nicht hineingeschrieben und in meinen Tabellen und Formular ect. steht überall KUNDENNR:
wie auf Bild 5 zusehen ist.
Gruß Gaby
Sorry habe ich doch hinein geschrieben, dachte aber nicht dass es eine wirkung hat sonst würde da z.B. Text67 stehen.
Wie meine Signatur sagt, ist der Computer nur so schlau wie der der Ihn edient. Gell ich weiß kann man mir noch helfen?
Muss der Code jetzt nur umgeschrieben werden?
Hallo Gaby,
tja wieso das Feld anders heißt müsstest DU wissen, schließlich hast DU ja die DB geschnitzt oder? ;D
Wahrscheinlich hat es ursprünglich Kundennummer geheißen und du hast es umbenannt, im Formular ist es beim alten Namen geblieben hier wurden nur die Bindung aktualisiert.
Ist aber jetzt egal.
Jetzt machst du Folgendes:
Im Formularentwurf das Feld Kundennummer anklicken und in den Feldeigenschaften unter Ereignisse 'Vor Aktualisierung' auswählen
Hier sollte eigentlich schon [Ereignisprozedur] eingetragen sein - stimmts?
Wenn du nun wieder auf die drei Punkte rechts davon klickst gelangst du direkt in die betreffende Ereignisprozedur,
in der folgender Code stehen müsste:
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
Diese Zeile ---- If Nz(DLookup("Kundennummer", "Kunden", "Kundennummer=" & Me!Kundennummer), 0) = Me!Kundennummer Then
Tausche nun bitte gegen diese aus:
If Nz(DLookup("[Kundennr:]", "Kunden", "[Kundennr:]=" & CLng(Me!Kundennummer)), 0) = CLng(Me!Kundennummer) Then
und wenn das jetzt nicht funktioniert ..... :'(
Grüße
Peter
Hallo,
das ist der Name des Feldes, das hat mit dem Feld wo hingeschrieben wird nichts zu tun.
Geschrieben wird in den Steuerelementinhalt. Und der ist "Kundennr:".
Ändere den Code wie folgt:
Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("[Kundennr:]", "Kunden", "[Kundennr:]=" & Me!Kundennummer), 0) = Me!Kundennummer Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub
Denn Doppelpunkt solltest Du entfernen, im Tabellenentwurf. Code aber dann anpassen. Auch den Steuerelementinhalt.
Hallo Ihr zwei,
@database
ich habe den Code probiert funktioniert nicht, da kommt keine Meldung wenn ich eine schon vergebene Nummer eingebe.
Da steht nichts im oberen Formular, aber im Unterformular stehen die Daten vom ersten Kunden, der die Nummer schon hat.
@MzKIMu
Ich habe dann den Doppelpunkt in den Tabellen bei Kundennr entfent, habe es im Code auch entfernt, funktioniert auch nicht
ich kann eine Nummer die ich schon habe eingeben, es stehen weder Daten im Formular noch im Unterformular
und wenn ich ins Unterformular springen möchte kommt eine Fehlermeldung (siehe Bild6)
Bin ich wirklich so blöd was mache ich falsch?
[Anhang gelöscht durch Administrator]
Hallo,
die Fehlermeldung resultiert aus dem Index ohne Duplikate. Wobei Du ja schon geschrieben hast, es würden doppelte Nummern in der Tabelle eingetragen. Was aber völlig unmöglich ist.
Zeige bitte mal den aktuellen Code und wie heist das Feld jetzt in der Tabelle und auf dem Formular.
Bitte nachsehen und den Code hier rein kopieren, nicht abschreiben.
Hay
Code kopiert nicht geschrieben:
Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("[Kundennr]", "Kunden", "[Kundennr]=" & Me!Kundennummer), 0) = Me!Kundennummer Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub
Private Sub Kundennr__AfterUpdate()
End Sub
In der Tabelle steht:
Kundennr
Im Formular steht (Steuerelementinhalt):
Kundennr
Hallo,
der Steuerelementinhalt war nicht die Frage, der Name des Feldes im Formular wird gebraucht.
Und was steht in der Zeile im Ereignis "Vor Aktualisierung" im Formularentwurf.
Hay
da steht auch Kundennr
es steht überall Kundennr nirgends Kundennummer mehr
Hallo Gaby,
Bitte --- ist das noch aktuell ---- Private Sub Kundennummer_BeforeUpdate(Cancel As Integer)
oder steht da jetzt ---- Private Sub Kundennr_BeforeUpdate(Cancel As Integer)
wenn die 2. Varriante zutreffend ist,
ändere das da --- & Me!Kundennr), 0) = Me!Kundenr Then
nochmal auf --- & CLng(Me!Kundenr)), 0) = CLng(Me!Kundennr) Then
Wenn die 1. Variante noch gültig ist,
ändere das da --- & Me!Kundennummer), 0) = Me!Kundennummer Then
nochmal auf --- & CLng(Me!Kundennummer)), 0) = CLng(Me!Kundennummer) Then
Der Grund - Du hast das Formularfeld nicht aus der Datenherkunft geholt sondern extra als Textfeld erstellt (Textfeld67) wodurch das Feld nicht die Information erhalten hat, dass Zahlen drin stehen
Durch obige Änderung wird das behoben (auch)
Dann sollte es laufen!
Hallo,
dann musst Du natürlich auch die Prozedurkopfanpassen und den Formularbezug.
Private Sub Kundennr_BeforeUpdate(Cancel As Integer)
If Nz(DLookup("[Kundennr]", "Kunden", "[Kundennr]=" & Me!Kundennr), 0) = Me!Kundennr Then
MsgBox "Kundennummer gibt es schon"
Cancel = True
Me.Undo
End If
End Sub
@Database
Ich glaube nicht, dass Clng erforderlich ist.
Außerdem hat Sie ja auch den Namen im Formular geändert.
Hallo Klaus,
CLng ist nicht erforderlich, wenn das Feldformat auf mindestens 'Standardzahl' eingestellt ist,
Durch das Hinzufügen des Textfeldes (nicht aus der Datenherkunft) ist diese Info nicht vorhanden daher ...
Ich hab's grad ausprobiert - es sei denn ich hätt da was übersehen -- nein :)
Ohne CLng läuft der Code OHNE den True-Zweig anzuspringen durch
Hallo Ihr zwei,
@MzKlMu
ich habe den Code genommen und eingefügt, habe dann das Feld im Formular gelöscht und aus
der Liste - Vorhandene Felder hinzu fügen - genommen
Kunden => Kundennr
Und Jungs es funktioniert
Viiiiiiiiiiiiiiiiiielen Dank Ihr seid spitze
Wo ist denn der Danke Button wo man anklicken kann
Na also, geht doch...
links im Kopfbereich des Lösungsbeitrages findest du einen roten Stern ---- das iss er!
Grüße
Peter
Äh Sorry seh keinen roten Stern sehe nur gelbe Sterne unter Euren Namen
Habe meine Computer Brille auf aber ICH SEH NICHTS
Auch sorry NICHT LINKS sondern RECHTS - Oh Mann jetzt wirds aber ernst! :o :o :o :-\
Greets
[Anhang gelöscht durch Administrator]
:D :D :D ;D
Finde ich nicht aber ein Freiburger Kindl aus Bayern sagt vielen Dank an Euch drei
Liebe Grüße
Gaby
Hallo,
hast Du auch mal bei einem DEINER Postings oben rechts geschaut?
Ansonsten viel Erfolg weiterhin.
Hay
Ja da steht nur
Zitat oder ändern
Danke
Jou und bei den anderen?
Bei Euch allen steht nur Zitat
Auch dann, wenn du im Bildschirm GANZ nach RECHTS scrollst?
Zitat
Hay
Ja da steht nur
Zitat oder ändern
...da sollte nämlich LÖSCHEN auch noch stehen - rechts davon
Nein da steht nichts von löschen nur das was ich geschrieben habe.
Trotzdem vielen Dank für die Hilfe
bis zum nächsten mal
Liebe Grüße Gaby