Neuigkeiten:

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

Mobiles Hauptmenü

Max-Wert für Formularfeld aus Abfrage vorgeben

Begonnen von ellinho, April 10, 2012, 14:26:56

⏪ vorheriges - nächstes ⏩

ellinho

Hallo zusammen.
Ich arbeite mit einem Access-Projekt und möchte eine Dateneingabe über ein Formular durchführen. Es wird ein Mitarbeiter ausgewählt und in ein Feld soll eine Anzahl an Stunden eingegeben werden, die dieser steuerfrei für den entsprechenden Monat ausbezahlt bekommen soll. Da das Kontingent des steuerfreien Betrags pro Jahr vom Gesetzgeber vorgeschrieben ist, darf hier natürlich nichts mehr eingegeben werden können, wenn das Kontingent verbraucht ist. Aus einer Abfrage bekomme ich das bereits verbrauchte Kontingent sowie die noch verfügbaren, abzubauenden Stunden über dieses Kontingent für das laufende Jahr...also den sogenannten Max-Wert für mein Formularfeld. Wie binde ich diesen Max-Wert in das Formularfeld ein, so dass er automatisch bei Auswahl der Personalnummer vorgeschlagen wird und keine höhere Eingabe zulässt ?

Gruß
Karsten

Beaker s.a.

Hallo Karsten,
ZitatWie binde ich diesen Max-Wert in das Formularfeld ein, so dass er automatisch bei Auswahl der Personalnummer vorgeschlagen wird und keine höhere Eingabe zulässt ?
Me!DeinFeld = DeinMaxWert
Dazu musst Du nur das passende Ereignis finden.
Wobei sich die Frage stellt, ob das Feld immer nur
einmal bei der Neuanlage eines DS editiert wird,
oder ob Eingaben auch verändert werden können.
Falls Ersteres vielleicht in Form_Current mit Überprüfung
auf Me.NewRecord
If Me.NewRecord then
    Me!DeinFeld = DeinMaxWert
End If

Ansonsten vielleicht DeinFeld_GotFocus.
Zum Abfangen einer höheren Eingabe:
Private Sub DeinFeld_BeforeUpdate(Cancel As Integer)
    If Me!DeinFeld.Text > DeinMaxWert Then
        MsgBox "Wert zu hoch! Höchstens " & DeinMaxWert & " Stunden zulässig"
        Cancel = True
    End If
End Sub

(Alles Luftcode)
hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ellinho

#2
Hallo Ekkehard.

Habe mal mit Deinem Code etwas rumprobiert. Allerdings weiß ich noch nicht, wie ich den MaxWert in das Formularfeld bekomme. Der Mitarbeiter (bzw. seine Personalnummer) wird über ein Kombifeld ausgewählt. Nun sollte das Feld, das den MaxWert anzeigen soll, diesen aus einer bereits existierenden Abfrage holen und der Wert zu der ausgewählten Personalnummer passen. In der besagten Abfrage existiert zu jeder Personalnummer ein Datensatz mit einem MaxWert. Ich weiß...Du hast mir hier schon eine Vorlage gegeben...allerdings bin ich am Rätseln, wie ich den Wert aus der Abfrage dort hineinbekomme ? ???

Gruß
Karsten

DF6GL

Hallo,

halt etwa so im Steuerelementinhalt eines Textfeldes:

=DomWert("MaxWert","abf_DeineAbfrage","Personalnummer='" & [Personalnummer] & "'"  )

wobei  Personalnummer  das Feld in der Abfrage mit Datentyp TEXT und Personalnummer das Formulartexfeld ist, das die aktuelle Personalnummer enthält.


Hat Personalnummer den Datentyp Zahl, Long, dann müssen die Hochkommata entfallen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

Hallo und Danke, Franz.

Habe es zwischenzeitlich mit einem DLookup probiert und es funktioniert wenigstens schon mal so weit, dass ein Wert vorgeschlagen wird. Allerdings ist das immer der erste MaxWert aus dem DS der Abfrage und nicht der zu der im Kombifeld des Formulars ausgewählten Personalnummer passende MaxWert.
Ich habe folgende Ereignisprozedur für das Kombifeld, über das der Mitarbeiter ausgewählt wird, geschrieben :
Private Sub Kombi_AfterUpdate()
Me!MaxWertFeld = DLookup("entsprichtStunden", "UebungsleiterPauschaleLJSum")
End Sub

Was muss ich wohl noch ändern ?

Gruß
Karsten

DF6GL

Hallo,

habe das doch ausführlich und auch noch farbig dargestellt     ::)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

Sorry Franz.
Funktioniert mit dem DLookup und Deiner Erweiterung mit der Personalnummer einwandfrei.
DANKE !!!

Gruß
Karsten

Beaker s.a.

Hallo Franz,
Zitathalt etwa so im Steuerelementinhalt eines Textfeldes:
Würde ich nicht machen, da das Feld dann nur zur Anzeige/Weiterverarbeitung
taugt, aber nicht editiert werden kann, also ein zusätzliches Control
ist.
IMO besser das Feld per Code vorzubelegen, DomWert ( = DLookup in VBA)
stehen dem ja nicht entgegen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

prinzipiell stimmt das schon, und je nachdem, was man vorhat, muss/kann  man sich für eine Methode entscheiden. Wenn wie anfänglich gesagt wurde, dieser Wert lediglich ein Vergleichswert sein soll, darf er eben nicht editierbar sein, sondern nur für die Überprüfung des eingebenen Wertes dienen. (Sofern ich das Vorhaben so richtig verstanden habe...   )
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Hallo Franz,
Zitatso dass er automatisch bei Auswahl der Personalnummer vorgeschlagen wird
Wie man's sieht  ;)

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)