Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access dopellte Werte verhindern mit Einschränkung

Begonnen von timo, November 16, 2016, 15:40:38

⏪ vorheriges - nächstes ⏩

timo

Hallo zusammen,

brauche heute noch mal eure Hilfe.

Ich habe das Feld Bestellnummer im Formular und dort darf diese nur einmal vergeben werden.

Habe auch den Code und das läuft auch super.

If IsNull(DLookup("[Bestellnummer]", "Beschaffung", "[Bestellnummer]='" & (Forms("Eingabe Beschaffung").Bestellnummer) & "'")) = True Then

    'Ist hier OK

Else

    MsgBox ("Bestellnummer ist bereits vorhanden. Bitte andere Bestellnummer eingeben")

    Exit Sub



Jetzt soll es aber so sein, dass pro Lieferant die Bestellnummer nur einmal vergeben werden darf.
Der Lieferant befindet sich auch in der Tabelle Beschaffung.

Kann mit jemand sagen, wie der Code heißen muss?

Hab leider keine Ahnung von VBA -.-

Vielen Dank

DF6GL

#1
Hallo,

vorteilhaft wäre, die gesamte Prozedur und die Tabellen- und Formularfeld-Namen zu posten, das ersparte viel Raterei...

vermutlich so:

If IsNull(DLookup("[Bestellnummer]", "Beschaffung", "[Bestellnummer]='" & Me!Bestellnummer & "'  And  Lieferant ='" & Me!Lieferant & "'")   Then


Besser ist die Dcount-Funktion geeignet:

If DCount("*", "Beschaffung", "[Bestellnummer]='" & Me!Bestellnummer & "'  And  Lieferant ='" & Me!Lieferant & "'")   = 0 Then



Als weitere Maßnahme käme in Betracht:

Zusammengesetzten eindeutigen Index über beide Tabellenfelder legen.

timo

#2
Hallo Franz,

danke aber leider hat es so nicht funktioniert.
Fehlermeldung Fehler beim Kompilieren: Erwartet Then oder Go to

Hier mal die kompletten angaben

Private Sub btnSaveBeschaffung_Click()
If IsNull(DLookup("[Bestellnummer]", "Beschaffung", "[Bestellnummer]='" & (Forms("Eingabe Beschaffung").Bestellnummer) & "'")) = True Then
    'Ist hier OK
Else
    MsgBox ("Bestellnummer ist bereits vorhanden. Bitte andere Bestellnummer eingeben")
    Exit Sub


Die Tabelle ist Beschaffung und beinhaltet das Feld Bestellnummer und Lieferant.
Das Formular heißt Eingabe Beschaffung und beinhaltet das Textfeld Bestellnummer und Lieferant.

bahasu

Hi,

statt "Erwartet Then oder Go to" erwarte ich eher ein "end if" nach dem "exit sub" {in der nächsten Zeile}.

Harald
Servus

Beaker s.a.

Hallo,
Mit einem eindeutigen Mehrfelderindex über Bestellnummer und Lieferant
kann man sich das alles sparen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

das mit dem eindeutigen Index sagte ich bereits...   8)

Trotzdem sorry, ich hatte das "And" vergessen.  :'(

Hier der komplette Code, wie er funktionieren sollte:



Private Sub btnSaveBeschaffung_Click()
If DCount("*", "Beschaffung", "Bestellnummer='" & Me!Bestellnummer  & "'  And  Lieferant ='" & Me!Lieferant & "'")   = 0 Then

    'Ist hier OK
Else
    MsgBox "Bestellnummer mit Lieferant ist bereits vorhanden. Bitte andere Bestellnummer oder anderen Lieferanten eingeben"

End If
End  Sub



wobei ich mich frage, warum eine solche Plausi-Prüfung hinter einem Schaltflächen-Klick liegt.




Beaker s.a.

Hallo Franz,
Sorry, hatte ich nicht gesehen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

timo