Access-o-Mania

Access-Forum => Formular => Thema gestartet von: Chris777777 am Dezember 19, 2017, 13:56:46

Titel: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 19, 2017, 13:56:46
Hallo zusammen,

ich habe ein Formular erstellt, indem u. a. das Feld "Kapazität" existiert. Die Kapazität reicht bis max. 100. Ein Benutzer trägt z.B. 60 in das Feld ein. Somit bleibt eine Restkapazität von 40 über. Wenn nun ein anderer Benutzer versucht 50 einzutragen, soll eine Fehlermeldung erscheinen, da die Kapazität überschritten wird. Ist sowas möglich?
Kann zudem die Restkapazität angezeigt werden, sodass die Benutzer wissen, wie viel Kapazität noch zur Verfügung steht?
VG
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Beaker s.a. am Dezember 19, 2017, 15:02:51
Hallo Chris,
1. Gültigkeitsregel auf Tabellen-/Feld-Ebene
<=100
2.
Me.DeinRestFeld = 100 - Me.DeinBelegtFeld
gruss ekkehard
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 20, 2017, 15:03:57
Hallo,
1. klappt super. Jedoch kann ich nun unendlich viele verschiedene Datensätze mit einer Kapazität von bis zu 100 speichern. Jeder Datensatz wird doch in einer Tabelle gespeichert. Wenn ich nun verschiedene Datensätze eingebe, z.B. Datensatz1=20, Datensatz2=50, Datensatz3=10, dann soll der Eintrag beim 4. Datensatz auf max. 20 beschränkt sein, da die Gesamtkapazität bei 100 liegt. Somit müsste das Formularfeld schon beim Eintrag auf die gespeicherten Einträge in der Tabelle zugreifen. Das das auch möglich?
VG,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Beaker s.a. am Dezember 20, 2017, 18:17:12
Hallo Chris,
Me.DeinBelegtFeld muss natürlich die Summe aus den DS beinhalten.
Luftcode ohne Kenntnis der Objektnamen und Zusammenhänge
=DomSumme("belegt";"DeineTabelle";"Bedingung")gruss ekkehard
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 21, 2017, 14:26:35
Hi,

das Feld in der die Kapazitäten eingetragen werden heißt "Paletten", z.B. 50
die dazugehörige Tabelle heißt "tblkapazität"
die Bedingung <=100
Somit:
=DomSumme("Paletten";"tblkapazität";"<=100"). Dies habe ich unter Gültigkeitsregel eingetragen.
Allerdings erhalte ich nun die Fehlermeldung: Syntaxfehler, fehlender Operator.
Was mache ich falsch?
Gruß,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: steffen0815 am Dezember 21, 2017, 14:54:53
Hallo,
du musst das Feld noch aufführen für welches die Bedingung gilt.=DomSumme("Paletten";"tblkapazität";"Paletten<=100")
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 21, 2017, 15:26:59
Bekomme immer noch die gleiche Fehlermeldung. Ich gebe den Code unter Gültigkeitsregel im Feld "Paletten"
Muss ich das irgendwo anders eintragen?
Gruß,
Christoph
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: DF6GL am Dezember 21, 2017, 15:39:14
Hallo,

eher so:


=DomSumme("Paletten";"tblkapazität") <=100
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 21, 2017, 16:42:55
Das funktioniert auch nicht...
Nun erhalte ich die Fehlermeldung, dass "der von Ihnen eingegebene Wert nicht der Gültigkeitsprüfungsregel genügt, die für das Feld bzw. Steuerelement definiert ist.
Gruß,
Christoph
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: steffen0815 am Dezember 21, 2017, 17:31:51
Hallo,
auf Tabellenebene funktioniert das nicht, weil da die Domänen-Funktionen nicht zur Verfügung stehen.

Gib in das Formularfeld "Gültigkeit" folgendes ein:DomSumme("Paletten";"tblkapazität";"[id]<>" & [id])+[paletten]<=100
Das Feld "ID" ist dein eindeutiger Datensatzkenner.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 22, 2017, 10:59:43
Nun erhalte ich die Fehlermeldung "Typenkonflikt".
Da ich Access Anfänger bin, liste ich jetzt nochmal detailliert auf, was ich gemacht habe. Vielleicht habe ich irgendwo einen Anfängerfehler gemacht.

Ich habe zunächst eine Tabelle erstellt. Das Feld "Paletten" habe ich als Felddatentyp "Zahl" hinterlegt, da hier nur Zahlen eingetragen werden müssen. Danach habe ich in der Kategorie Feldüberprüfung über das Dropdown-Menü "Überprüfung" bei "Feldüberprüfungsregel" <=100 eingegeben, damit in diesem Feld nicht mehr als eine Kapazität 100 eingetragen werden kann.
Danach habe ich aus der Tabelle ein gebundenes Formular erstellt. Im Formularfeld "Paletten" unter Gültigkeitsprüfungsregel habe ich die von Euch genannten Codes eingestellt, jedoch ohne Erfolg. (Unterschiedliche Fehlermeldungen: Syntax-Fehler, Typenfehler, etc.)
Ziel soll es sein auch die Gesamtkapazität auf 100 zu begrenzen. Bsp.: 1. Datensatz = Eintrag von einer Palettenanzahl von 20. Dieser Datensatz wird dann in der Tabelle gespeichert. Somit ergibt sich eine Restkapazität von 80 Paletten. Der nächste Eintrag erfolgt beispielsweise über 70 Paletten. Somit ist nur noch eine Restkapazität von 10 übrig. Im nächsten Datensatz dürfen also nur noch bis zu 10 Paletten eingetragen werden. Sobald 11 oder mehr Paletten eingetragen werden, muss eine Fehlermeldung erscheinen.
Vielen Dank für Eure Geduld.
VG,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: steffen0815 am Dezember 22, 2017, 11:06:44
Hallo,
lade am besten mal deine BeispielDB hoch.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 22, 2017, 12:04:15
Ok
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: steffen0815 am Dezember 22, 2017, 12:18:44
Hallo,
also Fotos von deiner DB helfen nicht weiter. Lade die DB selbst als *.zip (evtl. mit "Spieldatensätzen") hoch.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Lachtaube am Dezember 22, 2017, 12:32:28
Der Speicherplatzverbrauch Deiner 3 Bilder entspricht ca. 10 Beispieldatenbanken mit einer handvoll Formularen und Tabellen.

PS: wenn schon Screenshots hochgeladen werden, verwende doch bitte das png-Format - jpg-Bilder sollten man für Fotografien reservieren.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 22, 2017, 13:48:11
Ok. Wusste ich nicht.
Ich weiß allerdings auch nicht, wie ich eine ZIP-Datei erstelle bzw. wie die Access-Datei als ZIP speichere...
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: steffen0815 am Dezember 22, 2017, 13:54:55
Hallo,
Windows-Explorer -> Rechte Maustaste auf die DB-Datei -> Senden an -> ZIP-komprimierter Ordner
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: MzKlMu am Dezember 22, 2017, 13:56:05
Hallo,
zippen ist eine Windowsfunktion. Rechtsklick auf die Datei > Senden > an Zip komprimierten Ordner.

Vorher das Access Dienstprogramm "komprimieren reparieren" anwenden. Findest Du bei den Tools.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 22, 2017, 14:03:44
Ich hoffe so klappt.
Vielen Dank für Eure Geduld
VG,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: steffen0815 am Dezember 22, 2017, 14:08:22
Hallo,
hmm, auf einen ersten Blick scheint deine DB zu funktionieren.
Wo ist genau das Problem?

Btw:
Die Gültigkeitsregel aus der Tabelle kann raus - hilft ohnehin nicht weiter.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Dezember 22, 2017, 14:41:04
Sobald ich im Formular das Feld "Paletten" füllen möchte, erhalte ich die Fehlermeldung, dass der eingegebene Wert nicht der Gültigkeitsprüfungsregel entspricht. Ich kann also in dem Feld nichts eintragen.
VG,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Lachtaube am Dezember 22, 2017, 15:52:06
Es gilt immer zwei Möglichkeiten zu betrachten. Beim Ändern des Palettenwerts darf der alte Wert nicht berücksichtigt werden, wovon DSum aber noch gar nichts weiß. Beim Hinzufügen eines neuen Datensatzes wäre die Prüfung mit DSum ausreichend.

Ansonsten ist die Gültigkeitsregel auf Feldebene immer eine gute Sache, um z. Bsp. auch Werte <= 0 zu verhindern und bei externem Zugriff ohne Foermular wirksam zu werden. Nebenbei kann man auch noch ein Datenmakro mit der Überwachung der Gesamtmenge beauftragen, welches auch unabhängig von Formularen wirkt.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: PhilS am Dezember 27, 2017, 00:17:24
Nebenbei kann man auch noch ein Datenmakro mit der Überwachung der Gesamtmenge beauftragen, welches auch unabhängig von Formularen wirkt.
Daten auch unabhängig von Formularen auf ihre Integrität zu prüfen, finde ich immer eine gute Sache.

Das sollte sich in diesem Fall auch ohne Datenmakro machen lassen. Mit den relativ unbekannten CHECK CONSTRAINTS als Gültigkeitsregel wäre das wohl möglich. Diese lassen sich allerdings nur über ADO erstellen.

With CurrentProject.Connection
    .Execute "ALTER TABLE tblkapazität " & _
                " ADD CONSTRAINT chkPalettenSumme " & _
                " CHECK (100 >= (SELECT SUM(Paletten) FROM tblkapazität ));"
End With

Weil dies Thema eher etwas untergegangen ist, habe ich mal einen Text zur Gültigkeitsregeln geschrieben, der auch die CHECK CONSTRAINTS behandelt (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=access-tabelle-gueltigkeitsregel#check-constraints-ado).
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 09, 2018, 10:22:05
Hallo zusammen,

es ist nun schon eine Weile her, allerdings besteht mein Problem immer noch.
Ich habe mir die Datei von Lachtaube angeschaut. Allerdings funktioniert die Berechnung der Kapazität dort auch nicht richtig. Im ersten Datensatz müsste die Begrenzung ja noch bei 100 liegen. Im Bsp. liegt sie bei 33, obwohl davor noch kein Datensatz eingegeben wurde...
Zum Kommentar von PhilS: Wo muss ich denn den Code/Ausdruck eingeben. Bei der Gültigkeitsregel passt der Ausdruck ja nicht oder kann ich da auch i-wie den VBA öffnen?

Gruß,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: DF6GL am Januar 09, 2018, 10:36:13
Hallo,

lad mal deine DB (datenreduziert,  komprimiert/repariert und gezippt) hier hoch, damit man sieht, was Sache ist...
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 09, 2018, 11:30:49
Hallo,
zudem kommt noch die Problematik hinzu, dass die Kapazität von 100 für jeden neuen Tag gilt, also bspw. am 09.01. habe ich zunächst 100 Paletten zur Verfügung. Nun werden 40 Paletten aufgeschrieben, somit bleibt für diesen Tag eine Restkapazität von 60 übrig. Sobald ich einen Datensatz für ein anderes Datum hinzufüge, z.B. den 10.01. muss wieder die volle Kapazität von 100 zur Verfügung stehen.
Gruß,
Christoph
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Lachtaube am Januar 09, 2018, 11:56:40
Die Logik ist ganz einfach anhand der 3 Datensätze erklärt.
 
tblkapazitaet 
IDKundePalettenMitarbeiterKalendertag
24
Müller
1
Meier
03.01.2018
25
Schulze
65
Schmidt
03.01.2018
26
Meier
2
Kenn
22.12.2017
Ist der Datensatzzeiger auf dem ersten Datensatz, so wird 65 für Schmidt und 2 für Kenn aufaddiert. Die bisherige 1 kannst Du in Werte zwischen 2..33 ändern, um die 100 vollzumachen. Im Schmidt'schen Datensatz, wären Werte zwischen 1 und 97 zulässig, weil ja bereits 3 Plätze vergeben wurden.

Wenn Deine Vorstellung der Prüfung eine andere ist (ist sie vermutlich), so lasse uns das wissen, und erkläre bitte anhand weniger Beispieldaten, wie Prüfung und Ablauf miteinander einhergehen.

@Phil,

wenn Constraints in der von Dir vorgestellten Weise implementiert werden, so wirken diese zwar zuverlässig, erfordern aber bei einer Verletzung der Bedingung den Neustart eines gebundenen Formulars, weil das ADO Error-Objekt sich nach meiner Erfahrung nicht resetten lässt.

Und ohne die Dinger aufschiebbar (deferrable) machen zu können, was jeder gute Datenbankserver beherrscht (SQLite3 kann's leider auch nicht), ist ihre Verwendung doch sehr stark einschränkend. Man kann z. Bsp. keinen Key-Count > 1 vergeben, weil schon bei jeder Datensatzeingabe (auch via Append Query) die Bedingung sofort wirksam wird und einen Fehler auslöst.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 09, 2018, 12:25:41
Ok. Nun habe ich die Logik verstanden, habe es mir jedoch etwas anders gedacht:

ID  Kunde    Paletten    Mitarbeiter    Kalendertag
24  Müller    1              Meier            03.01.2018 <=100
25  Schulze  65            Schmidt        03.01.2018 <=99
26  Meier     2              Kenn            22.12.2017  <=100
27 Schmidt  14            Mayer           03.01.2018  <=34

Sobald der erste Datensatz eingetragen wird, in diesem Fall 24 Müller, soll die volle Kapazität von 100 zur Verfügung stehen. Da hier nun 1 Palette eingegeben wurde, soll sich die verfügbare Kapazität für 25 Schulze um 1 Palette verringern, sodass maximal 99 Paletten eingegeben werden können. 26 Meier ist ein anderes Datum. Für jeden neuen Tag sollen wieder die vollen 100 Paletten zur Verfügung stehen. 27 Schmidt bezieht sich wieder auf den 03.01.2018 sodass unter Abzug Müller und Schulze (100-1-65) noch 34 Palettenplätze verfügbar sind.
Gruß,
Christoph
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Lachtaube am Januar 09, 2018, 12:41:36
Zusammengefasst: an jedem Kalendertag dürfen maximal 100 Paletten eingelagert werden, egal von welchem Kunden - richtig?
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 09, 2018, 13:22:47
Jop genau
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: PhilS am Januar 10, 2018, 08:30:44
@Phil,
wenn Constraints in der von Dir vorgestellten Weise implementiert werden, so wirken diese zwar zuverlässig, erfordern aber bei einer Verletzung der Bedingung den Neustart eines gebundenen Formulars,
Nein, keineswegs. Sobald der Wert, der die Constraint-Verletzung auslöst, in den neuen oder geänderten Datensatz korrigiert ist, kann man diesen sofort speichern.

weil das ADO Error-Objekt sich nach meiner Erfahrung nicht resetten lässt.
?
Das ADO-Error-Objekt hat mit der ganzen Sache eigentlich nichts zu tun. Es muss ADO verwendet werden, um die Check-Constraints zu erstellen, aber danach existieren diese unabhängig von einer bestimmten Zugriffstechnologie.

Davon abgesehen, ich arbeite sehr viel mit ADO (wg. SQL-Server) und dass man nach einer Constraint-Verletzung ein Formular schließen und neu Öffnen müsste, um den Datensatz erneut korrekt einzugeben, ist mir noch nie aufgefallen.

Und ohne die Dinger aufschiebbar (deferrable) machen zu können,[...] ist ihre Verwendung doch sehr stark einschränkend.
Nun, Deferrable Constraints haben zu können ist natürlich ganz allgemein von Vorteil, aber auch ohne diese finde ich sowohl konventionelle Gültigkeitsregeln als auch Check Constraints ein nützliches Werkzeug bei der Datenbankentwicklung.

Auch der hier gewünschte Fall mit Maximalmenge pro Tag lässt sich damit abbilden.
Public Sub addCheckPaletten()

    With CurrentProject.Connection
        .Execute "ALTER TABLE tblkapazität  " & _
                    " ADD CONSTRAINT chkPalettenSumme " & _
                    " CHECK (100 >= (SELECT SUM(Paletten) FROM tblkapazität  k " & _
                    "       WHERE k.KalenderTag = tblkapazität.KalenderTag));"
    End With

End Sub

@Chris777777: Du kannst den obigen Code einmalig in VBA ausführen um diese Regel in deiner DB (vielleicht erstmal in einer Kopie) zu erstellen.
Beachte aber, dass du dafür sicherstellen musst, dass immer nur "ganze Tage", ohne Uhrzeiten in KalenderTag gespeichert werden dürfen.
Siehe auch: Nur-Datum-Werte in einer Tabelle erzwingen (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=datum-uhrzeit-datentyp-vba-access#nur-datum-werte-tabelle-erzwingen)
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 10, 2018, 10:34:15
Hi,
ich habe den Code im VBA eingegeben. Eine Begrenzung erfolgt jedoch nicht.
Bzgl. des Datums habe ich in der Tabelle die Gültigkeitsregel 0=Stunde([Kalendertag])+Minute([Kalendertag])+Sekunde([Kalendertag]) Oder IstNull([Kalendertag]) hinterlegt.
Gruß,
Chris
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Lachtaube am Januar 10, 2018, 11:26:15
@Phil,

gerade getestet - und es funktioniert. Ich kann leider die Konstellation, die ich bei meinen schon etwas länger zurückliegenden Experimenten mit Check-Constraints gemacht habe und mich zu meiner Aussage bzgl. des Error-Objekts veranlasst haben, nicht mehr nachstellen. Wasj a auch etwas Gutes für sich hat. :)

@Chris,

Du musst den von Phil gezeigten Code in ein neues allgemeines Modul einfügen und nur ein einziges Mal ausführen. Danach kann der Code wieder gelöscht oder auskommentiert werden.

Die Gültigkeitsregel gehört in die Eigenschaft der Tabelle unter Gültigkeitsregel eingetragen. Ich würde dafür den etwas kürzeren, aber gleichwertigen Ausdruck[Kalendertag]=Fix([Kalendertag])verwenden.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 10, 2018, 12:28:20
Ok super es funktioniert :)
Sobald nun eine Kapazität pro Tag von 100 überschritten wird, erscheint ein Laufzeitfehler "Sie können nicht zu dem angegebenen Datensatz springen". Kann man diese Meldung durch eine eigene ersetzen? So wie es von Lachtaube vorgeschlagen wurde (Die erlaubte Menge an Paletten darf xx nicht überschreiten)
Lässt sich in einem neuen Feld die noch verfügbare Kapazität abbilden, sodass der User erkennt, wie viele Paletten er noch eintragen darf? Auch hier ähnlich wie es bereits von Lachtaube probiert wurde?
Gruß,
Chris
Titel: OT, VBA-SQL-String Tutorial
Beitrag von: Beaker s.a. am Januar 10, 2018, 13:48:06
Hallo Philipp,
Zitat
Neuer Artikel: VBA-SQL-String Tutorial
Sehr schöner Artikel für Anfänger. Was ich vermisse ist ein Hinweis auf
die Möglichkeit des Debug.Print zum Testen.
In dem Zusammenhang hatte ich Mitte letzten Jahres folgende Überlegung
angestellt. Zitat aus Schwesterforum (http://www.ms-office-forum.net/forum/showthread.php?t=344674 (http://www.ms-office-forum.net/forum/showthread.php?t=344674))
Zitat
Irgendwie habe ich immer wieder das Gefühl, dass Fragesteller anscheinend Probleme mit
dem immer wieder empfohlenen Debug.Print haben. Meine Vermutung geht dahin,
dass sie das Direktfenster nicht kennen, und sich dann wundern, dass nichts passiert.
Daraus ist in Zusammenarbeit mit Josef Poetzl ein AddIn entstanden mit
dem sich eben solche Strings sehr komfortabel testen lassen; - so zu
sagen ein "aufgepimptes" Debug.Print.
Da Josef so freundlich war dieses in seine CodeLib aufzunehmen kannst
du es hier bei Interesse herunterladen
http://access-codelib.net/download/addins/SqlDebugPrint.zip (http://access-codelib.net/download/addins/SqlDebugPrint.zip)
Vielleicht könnte das auch eine sinnvolle Ergänzung zu deinem Artikel sein.
gruss ekkehard
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Lachtaube am Januar 10, 2018, 15:15:47
@Chris,

um eine konkretere Anzeige im Fehlerfall zu erhalten, kann im Error-Ereignis des Formulars eine Auswertung stattfinden.Option Explicit

Private Sub Form_Error(DataErr As Integer, Response As Integer)
   Select Case DataErr
      Case 3317:
         Response = acDataErrContinue
         MsgBox "Die Gesamtzahl aller Paletten je Tag darf 100 nicht " & _
                "überschreiten." & vbCr & vbCr & _
                "Datensatz kann nicht gespeichert werden." & vbCr & vbCr & _
                "Drücken Sie die <Esc>-Taste, um die Eingabe rückgängig zu" & _
                " machen oder überschreiben Sie den Paletten-Wert.", _
                vbExclamation
         Me.Paletten.SetFocus
   End Select
End Sub

Private Sub NeuerDatensatz_Click() 'statt Befehl17
   'mögliche Fehlernummern müsste man konkret untersuchen und entsprechend
   'reagieren - im Momoent bin ich zu faul dazu
   On Error Resume Next
   DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
   If MsgBox("Datensatz speichern?", vbYesNo) = vbNo Then
      Cancel = True
      If MsgBox("Änderungen verwerfen", vbYesNo) = vbYes Then
         Me.Undo
      End If
   End If
End Sub
Der Kalendertag sollte zum Pflichtfeld gemacht werden und ggf. gegen Zukunftseintragungen abgesichert werden.

Bei einem neuen Datensatz wäre es dann vorteilhaft, zuerst das Datum eingeben zu müssen, damit bei einer Paletten-Eingabe auch eine Prüfung der Palettensumme überhaupt möglich ist.

Die Anzahl der möglichen Paletten kann im Prinzip dann analog meines ersten Beispiels angewendet werden (hier müsste dann zusätzlich bei Datumsänderungen der Wert neu ermittelt werden), wobei die Abfrage nach der Summe von einem Datumsparameter abhängig gemacht wird.

Wenn dann an geeigneten Stellen (Beim Anzeigen und nach Änderung des Kalendertags) die Gültigkeitsregel für Paletten gesetzt wird, kann das Form_Error auch wieder entfallen, weil die Gültigkeitsregel des Formulars greift.
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: Chris777777 am Januar 10, 2018, 16:32:57
Im Error-Ereignis habe ich nun den ersten Code eingesetzt. Allerdings soll die Fehlermeldung direkt erscheinen, sobald 100 überschritten wurde. Nun erscheint sie, wenn das Formular verlassen wird.

Zudem erscheint der Laufzeitfehler 2105: Sie können nicht zum angegebenen Datensatz springen. Dies wird wahrscheinlich an dem Ausdruck
DoCmd.GoToRecord acDataForm, "frmkapazität", acNewRec
liegen, welcher beim Speichern hinterlegt wird
Der Fehler taucht nur auf, sobald die Kapazität von 100 überschritten wird. Die Begrenzung auf 100 funktioniert also. Jedoch erscheint dann halt dieser Laufzeitfehler. Liegt die Kapazität unter 100, erscheint der Laufzeitfehler nicht.

Habe die Datei nochmal angehängt.
Gruß,
Chris
     
Titel: Re: Zellenwert im Formularfeld begrenzen
Beitrag von: ebs17 am Januar 10, 2018, 17:29:15
Hinweis: Erste Regel sollte sein, dem Benutzer so zu helfen, dass er keine Fehler macht und somit nicht korrigiert werden muss.

Daher könnte man im Formular bei dem Textfeld zur Anzahleingabe einen Standardwert hinterlegen in der Art 100 - DSum des Tages.
Wenn der Benutzer dann noch weiß und beachtet, dass diese Vorgabe die maximal anwendbare Anzahl ist, wird er kaum noch Fehler machen. Eine sinngemäß gleiche Prüfung kann man in einer AfterUpdate-Ereignisprozedur dieses Textfeldes machen, um die Eingabe des Benutzers zu prüfen.

Der Rest (das oben genannte) ist dann nur die Absicherung.