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