Eingabekontrolle in Formularen - Bennung fehlender Felder
Verfasst: So, 16.02.2014 20:46
Hallo *,
bei der Eingabe in Formulare gibt es bisher zwei mögliche Fehlermeldungen bei fehlenden Eingaben: Zum einen meldet sich die grafische Benutzeroberfläche, wenn für ein Feld eine Eingabe nötig war - allerdings mit einer Allroundmeldung. Ist das Ganze nicht in der Benutzeroberfĺäche des Formulars angegeben, dann kommt eine Meldung der zugrundeliegenden Datenbank, natürlich mit einem SQL-Auszug.
Die deutschsprachige Meldung bekomme ich zur Zeit hier gar nicht reproduziert.
Ich wollte eine Möglichkeit erstellen, mit der die Meldung klar mitteilt, bei welchen Feldern noch eine Eingabe erforderlich ist. Wie üblich habe ich mir erst einmal etwas zusammengestrickt, was sicher noch besser läuft. Hier erst einmal der Code, den wir eventuell noch gemeinsam verbessern können:
Vom Prinzip her sollte dieses Makro alle Felder des Formulars automatisch überprüfen. Ist bei einem Feld "Eingabe erforderlich" auf "Ja" gesetzt und wird kein Inhalt eingegeben, so sollte eine Meldung erfolgen und die Eingabe unterbrochen werden.
Gruß
Robert
bei der Eingabe in Formulare gibt es bisher zwei mögliche Fehlermeldungen bei fehlenden Eingaben: Zum einen meldet sich die grafische Benutzeroberfläche, wenn für ein Feld eine Eingabe nötig war - allerdings mit einer Allroundmeldung. Ist das Ganze nicht in der Benutzeroberfĺäche des Formulars angegeben, dann kommt eine Meldung der zugrundeliegenden Datenbank, natürlich mit einem SQL-Auszug.
Die deutschsprachige Meldung bekomme ich zur Zeit hier gar nicht reproduziert.
Ich wollte eine Möglichkeit erstellen, mit der die Meldung klar mitteilt, bei welchen Feldern noch eine Eingabe erforderlich ist. Wie üblich habe ich mir erst einmal etwas zusammengestrickt, was sicher noch besser läuft. Hier erst einmal der Code, den wir eventuell noch gemeinsam verbessern können:
Code: Alles auswählen
SUB Eingabekontrolle(oEvent AS OBJECT)
REM Dieses Makro sollte an die folgenden Ereignisse des Formulars gebunden werden: 'Vor der Datensatzaktion'
REM Jedes Eingabefeld muss mit einem Beschriftungsfeld verbunden sein. Im Tabellenkontrollfeld ist dies über die Spaltenbeschriftung geregelt.
REM Die Beschriftungen der Felder werden benannt, bei denen ein Eintrag fehlt.
REM Ob das Feld tatsächlich einen Inhalt hat lässt sich nicht ohne Probleme ermitteln. Checkboxen und Radiobutttons speichern Statuswerte,
REM Zahlenfelder sgeben als Wert '0' aus, wenn sie leer sind ...
DIM Inputfeld()
DIM inAnzahl AS INTEGER
DIM oDocCtl AS OBJECT
DIM stText AS STRING
DIM oForm AS OBJECT
IF InStr(oEvent.Source.ImplementationName,"ODatabaseForm") THEN
oForm = oEvent.Source
oDocCtl = oForm.Parent.Parent.CurrentController
stText = ""
inAnzahl = 0
Inputfeld = array("NumericField","ListBox","CheckBox","TextField","DateField","TimeField","CurrencyField","FormattedControl","ComboBox","RadioButton", "PatternField", "GridControl")
REM Die Überprüfung von CheckBox und RadioButton ist eigntlich sinnlos. Sollen sie immer einen Wert abspeichern, so ist die Eingabe immer gleich
FOR i=0 TO UBound(oForm.ControlModels())
FOR k = 0 TO UBound(Inputfeld())
IF InStr(oForm.ControlModels(i).DefaultControl,Inputfeld(k)) > 0 THEN
IF (InStr(oForm.ControlModels(i).DefaultControl,"GridControl") > 0) THEN
FOR n = 0 TO oForm.ControlModels(i).Count() - 1
IF oForm.ControlModels(i).getByIndex(n).InputRequired = True AND IsEmpty(oForm.ControlModels(i).getByIndex(n).CurrentValue) THEN
IF stText = "" THEN
stText = oForm.ControlModels(i).getByIndex(n).Label
ELSE
stText = stText + ", " + oForm.ControlModels(i).getByIndex(n).Label
END IF
inAnzahl = inAnzahl + 1
END IF
NEXT
ELSE
IF oForm.ControlModels(i).InputRequired = True THEN
IF (InStr(oForm.ControlModels(i).DefaultControl,"CheckBox") > 0) OR (InStr(oForm.ControlModels(i).DefaultControl,"RadioButton") > 0) THEN
IF (oDocCtl.getControl(oForm.ControlModels(i)).peer.State = 0) THEN
IF stText = "" THEN
stText = oForm.ControlModels(i).Label
ELSE
stText = stText + ", " + oForm.ControlModels(i).Label
END IF
inAnzahl = inAnzahl +1
END IF
ELSEIF (InStr(oForm.ControlModels(i).DefaultControl,"ListBox")) THEN
IF (oDocCtl.getControl(oForm.ControlModels(i)).peer.selectedItem = "") THEN
IF stText = "" THEN
stText = oForm.ControlModels(i).LabelControl.Label
ELSE
stText = stText + ", " + oForm.ControlModels(i).LabelControl.Label
END IF
inAnzahl = inAnzahl +1
END IF
ELSEIF (oDocCtl.getControl(oForm.ControlModels(i)).peer.Text = "") THEN
IF stText = "" THEN
stText = oForm.ControlModels(i).LabelControl.Label
ELSE
stText = stText + ", " + oForm.ControlModels(i).LabelControl.Label
END IF
inAnzahl = inAnzahl +1
ELSE
END IF
END IF
END IF
END IF
NEXT
NEXT
IF inAnzahl > 0 THEN
IF inAnzahl = 1 THEN
msgbox "Im Feld "+stText+" ist ein Eintrag erforderlich."
ELSE
msgbox "In den Feldern "+stText+" sind Einträge erforderlich."
END IF
oForm.cancelRowUpdates
END IF
END IF
END SUB
Gruß
Robert