PDA

Vollständige Version anzeigen : Datumsfeld - falsche Eingabe abfangen


Hung
04.05.2011, 10:06
Hallo Forum,

habe ein Datumsfeld mit der Einstellung Format kurz.

Jetzt ist es aber so, dass bei Eingaben wie zB. 31.02.11das Feld mit dem
Datums-Wert 11.02.1931 gefüllt wird.

Schade eigentlich, dass hier nicht direkt eine Fehlermeldung erscheint.
Weiss jemand wie man trotzdem solche Fehleingaben verhindern kann. :)

Vielen Dank!

Edgar Basler
04.05.2011, 10:29
Wie meistens gibt es hierzu mehrere Möglichkeiten:

1.) Aufpassen - ok .... kein sonderlich guter Ansatz :p
2.) In der Tabelleneigenschaft kann man z.B. eine Gültigkeitsregel erstellen. Hat den Nachteil - wehe es kommt wirklcih ein Datum "11.02.1931´" vor.
3.) Im Formular kann man die Eigenschaft "vor Aktualisierung" benützen und dort per VBA eine Meldung erzeugen die darauf hinweist und trotzdem die Möglichkeit eröffnet dies abspeichern zu können.

Hung
04.05.2011, 11:10
Danke schon mal für die Antwort.

Da müßte es doch andere Möglichkeiten geben.
Die ein nicht im Kalender enthaltenes Datum abfangen.
Oder soll man im Hintergrund mit einer Tabelle das Datum prüfen?
Wäre das ne' Möglichkeit?

Josef P.
04.05.2011, 11:20
Hallo!

Wenn du die Eingabe im Format Tag.Monat.Jahr vorschreiben willst, könntest du auch die Text-Eigenschaft mit der Value-Eigenschaft vergleichen.

z. B.:
Private Sub DeinTextfeld_BeforeUpdate(Cancel As Integer)
Dim tb As TextBox
Set tb = Me.DeinTextfeld
If Format(tb.Value, "dd.mm.yyyy") <> tb.Text And _
Format(tb.Value, "d.m.yyyy") <> tb.Text And _
Format(tb.Value, "dd.mm.yy") <> tb.Text And _
Format(tb.Value, "d.m.yy") <> tb.Text Then
MsgBox "Bitte gültiges Datum eingeben"
Cancel = True
End If
End Sub
.. oder beliebige Abwandlungen von diesem Code. ;)

mfg
Josef

ebs17
04.05.2011, 11:28
Da müßte es doch andere Möglichkeiten geben.
Wenn man denn gleich dem Benutzer ein Kalenderformular/-steuerelement anbietet, wird er in der Lage sein, ein gültiges Datum auszuwählen, und gerne dieses Angebot nutzen, weil er klickfaulerer agieren kann.

Man sollte dem Benutzer doch helfen, gleich Richtiges zu tun, statt ihm nachträglich mitzuteilen, dass er gerade "Mist" gemacht hat, egal ob verschuldet oder nicht.

Lanz Rudolf
04.05.2011, 11:29
Hallo
wie Edgar Basler sagt Datum Prüfen
da dass feld tt.mm.jj 31.02.11 ungültig ist (31. FEb ?) formatiert er das Feld in jj.mm.tt
evtl. eine Eingabemaske verwenden das tt.mm.jjjj eigegeben werden muss

Josef P.
04.05.2011, 11:32
Wenn man denn gleich dem Benutzer ein Kalenderformular/-steuerelement anbietet, wird er in der Lage sein, ein gültiges Datum auszuwählen, und gerne dieses Angebot nutzen, weil er klickfaulerer agieren kann.
... aber nur jene User die gerne mit der Maus herumklicken.
Jene User, die lieber die Hand bei der Tastatur lassen, werden so ein Kalendersteuerelement nicht nutzen, da die Datumseingabe per Tastatur schneller ist. ;)

BTW: Datumsauswahl über Kalender ist in Ac2007 bereits fertig für Textfelder vorhanden. Man benötigt kein zusätzliches Steuerelement.

Man sollte dem Benutzer doch helfen, gleich Richtiges zu tun, statt ihm nachträglich mitzuteilen, dass er gerade "Mist" gemacht hat, egal ob verschuldet oder nicht.
Hier stimme ich dir aber zu 100% zu. ;)

mfg
Josef

ebs17
04.05.2011, 11:59
da die Datumseingabe per Tastatur schneller ist
Für die, die wissen, was sie tun, schon. Strg + ; erzeugt z.B. das aktuelle Datum. Dann wäre der angebotene Kalender ein Angebot.

Bei einer Eingabe wie 31.02.11 wäre ein optisches Angebot aber durchaus hilfreich, da auch eine zweistellige Jahreszahl bei sonst korrektem Datum je nach Einstellung in der Systemsteuerung unterschiedlich interpretiert werden kann.

Eine Notwendigkeit der Datumsprüfung bleibt in vielen Fällen bestehen, da ein Datum, das syntaktisch richtig ist, inhaltlich voll daneben liegen kann.

Hung
04.05.2011, 12:07
Ich Danke Euch.

Der code von Josef hift mir perfekt weiter.

merci :)

Atrus2711
04.05.2011, 12:24
Hi,


zweistellige Jahreszahlen könnte man durch Eingabeformat verhindern. Dann muss auch nicht interpretiert werden. Seit Y2k sollten zweistellige Jahreszahlen bei der Eingabe tabu sein.
das "Uminterpretieren" von Datumswerten, die der Ländereinstellung widersprechen, halte ich für eine Unart von MS. Mein Traum wäre ein tippbares Control (ggf. mit Kalenderpopup-Option), das die Datumswerte in einstellbarer (ggf. aus der Ländereinstellung übernommener) Notation erwartet und alles andere zurückweist (mangels Vererbung in VBA aber nicht gut möglich). Ein 02-14-2011 ist in D m.E. schlichtweg kein Datum. Wer den 14.02.2011 meint, soll das in D auch so eingeben.
Inhaltliche Fehler sind ohnehin logisch kaum erkennbar. Wenn ein Geburtsdatum durch Tippfehler falsch, aber immer noch gültig ist, ist das eben eine Falscheingabe. Plausis wie erforderliche Volljährigkeit, "Geburtsdatum <= Date()" helfen oft, aber nicht immer.

Josef P.
04.05.2011, 12:42
Hallo!

Mein Traum wäre ein tippbares Control (ggf. mit Kalenderpopup-Option), das die Datumswerte in einstellbarer (ggf. aus der Ländereinstellung übernommener) Notation erwartet und alles andere zurückweist (mangels Vererbung in VBA aber nicht gut möglich).

... mit einer Hilfsklasse zur Steuerung eines Textfeldes aber auch nicht unbedigt der Riesenaufwand im Formular. (Die Klasse selbst kann natürlich schon etwas komplexer werden - aber das interessiert später nicht mehr, wenn sie funktioniert. ;))

mfg
Josef

Hung
04.05.2011, 12:45
Hallo Martin,

zu den letzten beiden Punkten bin ich Deiner Meinung.
Monat;Tag;Jahr - klar unlogisch. :p

Plausibilitätsabfragen sind meiner Erfahrung nach ziemlich
oft notwendig.

Atrus2711
04.05.2011, 12:48
@Hung:
Beim 02-14-2011 ist die Alternative vielleicht noch erahnbar. Aber was machst du beim 02-03-2011: Ist das nun der 02. März oder 03. Februar? Und wenn ja, warum? Und wie sieht das dann ein Schweizer/Franzose/US-Amerikaner/Brite?

Solang nicht dabei steht bzw. geregelt ist, was Monat und was Tag ist, ist das alles nur Vermutung. Das "Dabeistehen" ist eigentliche die Ländereinstellung. Wer die aber nicht beachtet, kriegt nicht etwa eine Fehlermeldung, sondern wird gedeutet. Fakten sollten aber nicht deutbar sein, sondern zweifelsfrei.

Und zur Plausi: Person X ist am 11.10.1980 geboren. Welche Plausi will anschlagen, um zu verhindern, dass man den 12.10.1980 eingibt? Und welche Plausi will erkennen, wo im Namen "Fritz Martin" der Vorname und wo der Nachname steckt? :)

Lanz Rudolf
04.05.2011, 18:14
Hallo
ich habe da :
http://cid-0838611f737bd3d9.office.live.com/self.aspx/ACC/KalenderKK.zip
eine Muster MDB
möglich dass das was für Dich ist
öffne die MDB und dann Form "FrmKTest" oder "FrmELFmDE"

auf den Formularen sollte das nötigste an anweisungen zu lessen sein ! :)

ebs17
04.05.2011, 18:33
Und zur Plausi: Person X ist am 11.10.1980 geboren. Welche Plausi will anschlagen, um zu verhindern, dass man den 12.10.1980 eingibt? Und welche Plausi will erkennen, wo im Namen "Fritz Martin" der Vorname und wo der Nachname steckt?
Solche Beispiele können aber nicht dazu führen zu glauben, dass Plausibilitätsprüfungen generell unnötig und unmöglich sind, und die Erfahrung eines anderen können sie auch nicht auf Null legen.
Ein Test, ob ein Geburtsdatum vor einem Betriebseintritt liegt, ein Spieler einer A-Jugend-Mannschaft nicht 36 ist u.a. wird durchaus machbar sein.

achtelpetit
04.05.2011, 19:03
Du kannst auch Kombifelder anbieten: also Tag, Monat und Jahr in jeweils einem separaten Kombifeld. Das Datum kannst du dann einfach aus dem Inhalt der 3 ungebundenen Kombis zusammensetzen.
Das läßt sich sowohl mit der Tastatur als auch mit der Maus gut bedienen und ist unmißverständlich. Außerdem hast Du unter Umständen schon einen Teil der Plausi-Prüfung bei der Eingabe erledigt, wenn nämlich nur Jahreszahlen in einem für den Zweck gültigen Bereich angeboten werden.

Atrus2711
04.05.2011, 21:26
Ein Test, ob ein Geburtsdatum vor einem Betriebseintritt liegt, ein Spieler einer A-Jugend-Mannschaft nicht 36 ist u.a. wird durchaus machbar sein.
Ja, siehe #10. Ich bin auch eher ein Freund von vielen/strengen Plausis. Aber auch bei Erfüllen aller Plausis sind die Ergebnisse nicht 100% richtig. Es lag mir fern anzudeuten, Plausis seien unnütz.