Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Zellenwert im Formularfeld begrenzen

Begonnen von Chris777777, Dezember 19, 2017, 13:56:46

⏪ vorheriges - nächstes ⏩

Chris777777

Ok. Wusste ich nicht.
Ich weiß allerdings auch nicht, wie ich eine ZIP-Datei erstelle bzw. wie die Access-Datei als ZIP speichere...

steffen0815

Hallo,
Windows-Explorer -> Rechte Maustaste auf die DB-Datei -> Senden an -> ZIP-komprimierter Ordner
Gruß Steffen

MzKlMu

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.
Gruß Klaus

Chris777777

Ich hoffe so klappt.
Vielen Dank für Eure Geduld
VG,
Chris

steffen0815

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.
Gruß Steffen

Chris777777

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

Lachtaube

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.
Grüße von der (⌒▽⌒)

PhilS

Zitat von: Lachtaube am Dezember 22, 2017, 15:52:06Nebenbei 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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Chris777777

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

DF6GL

Hallo,

lad mal deine DB (datenreduziert,  komprimiert/repariert und gezippt) hier hoch, damit man sieht, was Sache ist...

Chris777777

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

Lachtaube

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.
Grüße von der (⌒▽⌒)

Chris777777

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

Lachtaube

Zusammengefasst: an jedem Kalendertag dürfen maximal 100 Paletten eingelagert werden, egal von welchem Kunden - richtig?
Grüße von der (⌒▽⌒)

Chris777777