PDA

Vollständige Version anzeigen : Pflichtfelder in Formular


DerLothringer
15.06.2012, 07:10
Guten Morgen Forum,

mein Problem sieht wie folgt aus:

Ich habe ein Formular das Daten in eine Tabelle überträgt. Unten im Formular habe ich einen Button integriert der das Formular schließt und ein anderes Formular öffnet. Nun möchte ich aber das das Formular nur geschlossen werden kann wenn alle Felder ausgefüllt wurden.

Der Befehl der auf dem Knopf liegt lautet:

Private Sub Befehl329_Click()
DoCmd.Close
DoCmd.OpenForm "Formular2"
End Sub


In der Tabelle die vom Formular aus gefüllt wird sind bereits alle Feder als Pflichtfelder eingestellt. Hat noch jemand eine Idee? Kann man den Prüfbefehl vielleicht mit in den des Knopfes integrieren, so in der Art:

Private Sub Befehl329_Click()
If Feld1 <>0 Then
DoCmd.Close
DoCmd.OpenForm "Formular2"
Else IF MsgBox "Bitte Feld1 ausfüllen"
End Sub

hcscherzer
15.06.2012, 07:54
Versuch es mal, in dem Du die Felder auf NULL überprüfst statt mit dem nummerischen Wert 0, alsoif not isnull(feld1) and not isnull(feld2) then
' schliessen
end if

Storch
15.06.2012, 08:09
Moin moin

vorab eine Bitte. Es gibt hier oben in der Symbolleiste den Button 'Code einfügen'. Benutze diesen bitte. Der Code wird dadurch für alle leserlicher, Einrückungen bleiben erhalten.

Dein Lösungsansatz ist schon ganz OK. Dein 'Else If'-Konstrukt kann aber so nicht funktionieren. Wenn DU nach Else eine Anweisung ausführen willst, muss die in eine neue Zeile und um die MsgBix zu öffnen ist dan auch kein weiteres IF mehr nötig. Auch muss eine If-Anweisung mit End If abgeschlossen werden. Siehe rote Markierung

Private Sub Befehl329_Click()
If Feld1 <> 0 Then
DoCmd.Close
DoCmd.OpenForm "Formular2"
Else
MsgBox "Bitte Feld1 ausfüllen"
End If
End Sub

Die Bedingungsprüfung
If Feld1 <> 0 Then
funzt nur für Zahlenfelder, sofern sie mit dem Standardwert = 0 voreingestellt sind. Falls nicht sollte da mittels 'Nz' eine Null-Behandlung rein
If Nz(Feld1,0) <> 0 Then

Für Textfelder wäre die einfachste Werteprüfung folgende:
If Nz(Feld1,"") <> "" Then
Wenn sich hier aber irgendwie ein Leerzeichen einschleicht, das als solches im Feld nicht unbedingt zu erkennen ist, dann taugt die Prüfung nix. Besser ist dann:
If Trim(Nz(Feld1,"")) <> "" Then
HIer wird das Feld1 zunächst Nullbehandelt, Mittels Trim werden aus dem Ergebnis alle Leerzeichen entfernt, so vorhanden.
Dann gibt es noch diese Variante:
If Len(Trim(Nz(Feld1,""))) <> 0 Then
Hier wird die vorige Variante auch noch auf deren Länge überprüft.

DerLothringer
15.06.2012, 08:52
Vielen Dank für die Antworten, hat mir alles super geholen. Jetzt habe ich nur das Problem das mir in einem Feld nur die automatische Gültigkeitsregel angezeigt wird weil ich das Feldformat auf AAAAAAAAAAAAAAAAA gesetzt habe. Muss ich was spezielles bei der Gültigkeitsregel beachten bzw. bei der Meldung damit mir diese vorrangig vor der von ACC angezeigt wird?

Ich will nur das bei Falscheingabe die Meldung "FZG muss 17 Zeichen enthalten" erscheint


Danke für eure super Antworten!

Atrus2711
15.06.2012, 09:29
Gültigkeitsregeln für Felder werden sofort beim Verlassen des Feldes geprüft, also bevor der Button-Klick verarbeitet wird. Du kommst also gar nicht zum Buttonklicken, wenn du die Feldregel verletzt.

DerLothringer
15.06.2012, 09:59
Jedoch bekomme ich nicht die von mir eingegebene Gültigkeitsmeldung wenn das vorgegebene Format verletzt wird. Es kommt nur die automatische Access-Meldung und nicht die von mir vorgegebene Gültigkeitsmeldung.

Atrus2711
15.06.2012, 10:02
Eine Gültigkeitsmeldung hat auch nichts mit dem Format zu tun. Einen Formatverstoß kannst du nur per VBA abfangen und klären, ansonsten kriegst du die (zugegegeben hässliche) Meldung, dass die Eingabe gegen das Eingabeformat verstößt.

hcscherzer
15.06.2012, 10:04
Zuerst wird das Eingabeformat geprüft. Bei jedem Tastendruck.
Vor Verlassen des Steuerelements wird die Gültigkeitsregel geprüft.
Dann tritt das Ereignis Before_Update ein. Hier kann man auch noch was prüfen.
Dann wird der Feldinhalt gespeichert (bei gebundenen Feldern).
Dann tritt das After_Update Ereignis ein.

DerLothringer
15.06.2012, 10:16
Also bei Eingabeformat des Textfeldes steht zur Zeit zum Beispiel

"AAAAAA"

ich möchte jetzt das wenn jemand zu wenige Buchstaben eingibt die Meldung kommt: "ABC Wert muss 6 Stellen haben!"

Mach ich das jetzt im before Update fdes feldes und frage die anzahl der Zeichen ab.

ungefähr

If Me!Feld1 Länge = 6 then
Else MsgBox "ABC Wert muss 6 Stellen haben!"


Kann mir da mal jemand auf die Sprünge helfen?

Danke nochmal für eure kompetente Hilfe hier!

Atrus2711
15.06.2012, 10:25
Fast genau so geht es.
If Len(NZ(Me!txtDeintextfeld)) <6 Then
MsgBox "DeinTextfeld muss mindestens 6 Zeichen haben"
End If

Bei der Gelegenheit kann dann auch die Begrenzung auf Zahlen geprüft werden. Das Eingabeformat und seine hässliche Meldung haben dann ausgedient.
If Len(NZ(Me!txtDeintextfeld)) <6 Then
MsgBox "DeinTextfeld muss mindestens 6 Zeichen haben"
Else
If Not IsNumeric(Me!txtDeintextfeld) Then
MsgBox "DeinTextfeld muss numerisch sein"
End If
End If

DerLothringer
15.06.2012, 10:36
Funktioniert so ganz gut, nur leider kann man jetzt mehr als 6 Zeichen eingeben. Hast du eine IDee warum das so ist? Wenn ich das eingabeformat wieder auf AAAAAA setze kommt wieder die ACCESS Meldung...

Es muss doch möglich sein auf 6 zeichen zu begrenzen und die Meldung anzuzeigen.

Atrus2711
15.06.2012, 10:48
Wenn nach dem 6. Zeichen schon beim Tippen Schluss sein soll, müsste die Prüfung OnChange des Textfeldes laufen, auf den aktuellen, noch ungespeicherten Wert zugreifen und dann z.B. die ersten 6 Zeichen stehen lassen:
Private Sub Text0_Change()
If Len(Nz(Me!Text0.Text)) > 6 Then
MsgBox "Stop!!"
Me.Text0 = Left(Nz(Me!Text0.Text), 6)
End If

DerLothringer
15.06.2012, 11:37
Das wäre zwar eine Möglichkeit, ist jedoch etwas am Ziel vorbei. Ich möchte das das Feld so "formatiert" ist das man einfach nur 6 Buchstaben eingeben kann, So als ob ich im Eingabeformat AAAAAA eingegeben hätte. Wenn jedoch zu wenig Buchstaben eingegeben werden soll die Meldung erscheinen "Feld1 muss 6 Zeichen haben!"

Noch jemand eine Idee dazu? Gibt es keine Möglichkeit das über die Gültigkeitsmeldung zu machen. Wieso wird die eigentlich generell nie angezeigt?

Maxel
15.06.2012, 11:57
Probiere mal dies:

Lass das Eingabeformat weg und formuliere in der Gültigkeitsregel:
Länge(nz([Text0]))=6

Dann greift Deine Gültigkeitsmeldung.

DerLothringer
15.06.2012, 12:02
In diesem Fall bekomm ich die Meldung "Der von Ihnen eingegebene Wert genügt nicht der Gültigkeitsprüfungsregel die für das Feld definiert ist.

Ich bin am verzweifeln, das kann doch nicht so schwer sein!

Maxel
15.06.2012, 12:05
OK, bei mir (unter A03) funktioniert's.

DerLothringer
15.06.2012, 12:14
Ich hab das Ganze jetzt anders gelöst. Über Select Case Abfrage wird jedes einzelne Feld vor Verlassen des Formulars überprüft ob es ausgefüllt ist. Die 2 Felder die genau 6 bzw. 17 Zeichen haben sollen haben nach der Select Case Abfrage immer noch eine Abfrage auf Anzahl der Zeichen.

Wenn man nun alle Felder ausgefüllt hat und das Formular beenden will kommt immer noch die Mitteilung Feld1 hat nicht genau 6 zeichen.

Nicht so wie ich es eigentlich wollte, das Ergebnis ist aber das gleich.

Danke für eure Mithilfe, hat mir sehr geholfen!

Schönes Wochenende!

Atrus2711
15.06.2012, 12:52
immer noch die Mitteilung Feld1 hat nicht genau 6 zeichen
Guck halt mal an den 3 möglichen Auslösern dafür:
Code,
Gültigkeitsregel,
Eingabeformat.
Einer wird da überflüssig sein.