Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Mykis am März 24, 2016, 12:53:08

Titel: Ziffernbegrenzung
Beitrag von: Mykis am März 24, 2016, 12:53:08
Hallo,

in unseren Pilzkartierungsprogramm arbeiten wir mit Meßtischblättern.
Diese sind z.B. so aufgebaut: 5921,444
Nun kann ich, um Fehleingaben zu verhindern, die Zahl vor dem Komma klar definieren und eine Meldung bei Fehleingabe einbauen. Wie könnte ich die Ziffernfolge nach dem Komma auf 111 bis 444 begrenzen, da es sich um Quadranten handelt. Wenn also eine größere Ziffer als 4 oder eine "0" nach dem Komma eingegeben wird, soll eine Meldung erscheinen.

Beste Grüße
Frank
Titel: Re: Ziffernbegrenzung
Beitrag von: MzKlMu am März 24, 2016, 13:00:12
Hallo,
es sind ja nicht wirklich Kommazahlen sondern 2 getrennte Informationen.
Ich würde daher 2 Felder verwenden und diese zur Anzeige zusammensetzen.
Dann kannst Du ganz einfach mit einer Gültigkeitsregel direkt in der Tabelle arbeiten.
Zwischen 111 Und 444

Oder mit getrennten Feldern lässt sich auch einfach die Zahlen auf 1,2,3 und 4 begrenzen.

Wie ist denn die Gültigkeitsregel vor dem Komma ?
Titel: Re: Ziffernbegrenzung
Beitrag von: Mykis am März 24, 2016, 13:08:22
Hallo Klaus,

ich habe im Eingabeformular nur ein Feld zur Verfügung. Die Ziffernfolge vor dem Komma ist begrenzt zwischen 0916 bis 8749.
Titel: Re: Ziffernbegrenzung
Beitrag von: DF6GL am März 24, 2016, 15:10:34
Hallo,

ZitatDie Ziffernfolge vor dem Komma ist begrenzt zwischen 0916 bis 8749.

Und wie wird das gemacht?
Wenn da eine "0" an erster Stelle im Wert(!, nicht entspr. einer Formatangabe für die Anzeige) vorkommt, handelt es sich um Text und nicht um eine Zahl.

Was/wer hindert daran, das Feld in zwei aufzuteilen?


Wenn es bei einem Feld bleiben muss, und der Tabellenfeld-Datentyp TEXT ist  , dann könnte in z. B. der AfterUpdate-Prozedur der Textfeldinhalt mit der Split-Funktion, in die Vor- und Nachkomma-Teile getrennt und entspr. geprüft werden.


Handelt es um Tabellenfeld-Datentyp um Zahl (Double oder Währung), so kann die (diesmal "richtige") Zahl mit der  INT()- Funktion in den ganzzahligen Teil und durch Subtraktion des ganzzahligen Teils vom eigentlichen Wert in den Restwert aufgespalten und hiermit überprüft werden.
Titel: Re: Ziffernbegrenzung
Beitrag von: Mykis am März 24, 2016, 16:54:36
Hallo Franz,

das Format ist Zahl (Double, Festkommazahl). Die Null bei 0916 wird ignoriert, das MTB heißt nur so. Die Eingrenzung der ganzen Zahl ist also mit > 915 und < 8750 definiert.
Wie ich schon mal schrieb, habe ich den Titel Access-Profi nur durch Anfragen verdient, nicht durch Wissen. :)
Außer mit VBA komme ich ganz gut mit alles anderen Funktionen in Access zurecht. Aber hier wird wohl professionelle Programmierkenntnis verlangt.
ZitatHandelt es um Tabellenfeld-Datentyp um Zahl (Double oder Währung), so kann die (diesmal "richtige") Zahl mit der  INT()- Funktion in den ganzzahligen Teil und durch Subtraktion des ganzzahligen Teils vom eigentlichen Wert in den Restwert aufgespalten und hiermit überprüft werden.
Wie müßte denn dein Vorschlag als Code aussehen?

LG
Frank


Titel: Re: Ziffernbegrenzung
Beitrag von: DF6GL am März 24, 2016, 17:24:51
Hallo,



z. B.:


Public Function IsKoordOK(dblWert ) as Boolean
Dim intVK  as Long, dblNK as Double

IsKoordOK =False

intVK = Int (nz(dblWert,0.))
dblNK =nz(dblWert,0.) - intVK

If (intVK > 915 and intVK < 8750)  and (dblNK > .110 and dblNK < .445)  Then
      IsKoordOK =True
End If

End Function
Titel: Re: Ziffernbegrenzung
Beitrag von: MzKlMu am März 24, 2016, 17:30:50
Hallo,
ZitatAber hier wird wohl professionelle Programmierkenntnis verlangt.
mit der Aufteilung auf 2 Felder wird hier kein Buchstabe Programmierung benötigt.

Die Aufteilung auf 2 Felder ist gemäß den Normalisierungsregeln (1. Normalform, atomare Inhalte), sogar zwingend notwendig.

Warum kannst Du kein 2. Feld hinzufügen ?
Titel: Re: Ziffernbegrenzung
Beitrag von: Mykis am März 24, 2016, 18:15:39
Hallo Franz,

vielen Dank. Ich habe mal die Function eingebaut und rufe sie im entsprechenden Feld unter "Sub MTB_Change()" auf. Aber beim Kompilieren kommt "Argument ist nicht opional"

@Klaus- Die Datenbank wird schon von vielen Pilzkartierern benutzt. Die entsprechende Fundortdatei ist über Verknüpfungen mit der "Programm.mdb" verbunden und ich habe keinen Zugriff auf die "Fundort.mdb's" um dort Felder aufzuteilen. Außerdem ist die Datenbank inzwischen sehr komplex und das Feld "MTB" wird in vielen Abfragen, Formularen und Berichten verwendet.

Frank
Titel: Re: Ziffernbegrenzung
Beitrag von: Mykis am März 24, 2016, 18:26:10
Hallo Franz,

bei mir sieht der Code so aus:Public Function IsKoordOK(dblWert) As Boolean
Dim intVK  As Long, dblNK As Double

IsKoordOK = False

intVK = Int(Nz(dblWert, 0#))
dblNK = Nz(dblWert, 0#) - intVK

If (intVK > 915 And intVK < 8750) And (dblNK > 0.11 And dblNK < 0.445) Then
IsKoordOK = True
End If

End Function


Der Punkt hinter der Null wird automatisch durch eine Raute ersetzt.
Titel: Re: Ziffernbegrenzung
Beitrag von: Mykis am März 24, 2016, 21:41:27
Hallo Franz,

deinen Code habe ich nun als "private sub" eingestellt und da funktioniert alles. Als "public function" ließ er sich nicht aufrufen.

Vielen Dank und schöne Ostern
Frank
Titel: Re: Ziffernbegrenzung
Beitrag von: DF6GL am März 24, 2016, 22:22:50
Hallo,

das muss auch mit "Public" gehen..

Als "Private" (im Formular-Klassenmodul)  ist der Scope (Gültigkeitsbereich)  nur auf dieses Formular begrenzt.
Titel: Re: Ziffernbegrenzung
Beitrag von: Mykis am März 25, 2016, 09:46:36
Hallo Franz,

ja es läuft jetzt auch unter "Public Function".
Nochmals Danke und beste Grüße
Frank