Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: xoius am Mai 04, 2020, 10:22:49

Titel: Einfaches Füllen von Feldern im Endlosformular
Beitrag von: xoius am Mai 04, 2020, 10:22:49
Hallo mal wieder :)

Ich brauche erneut euren fachmännischen Rat.
Heute treibt mich ein (vermeindliches) VBA-Thema um:

Ausgangslage
Ich habe in der Tabelle tblProdukte u.a. die Einträge
- CONummer
- Vorvereinbarungsnummer
- Vertragsnummer
- Kontraktnummer
mit jeweils Standardwert "0" (die Zahl, nicht NULL)

Aufgabestellung
Nun lasse ich mir die Produkte in einem Endlosformular anzeigen. Dort gibt es für jeden Datensatz das ungebundene Textfeld "Text53". In dieses Textfeld möchte ich gerne eintragen, wo wir uns vertraglich befinden.

Ansatz
Ereignis beim Laden des Formulars
If Me.CONummer <> 0 Then Me.Text53 = "CO"
If Me.Vorvereinbarungsnummer <> 0 Then Me.Text53 = "VV"
If Me.Vertragsnummer <> 0 Then Me.Text53 = "V"
If Me. Kontraktnummer <> 0 Then Me.Text53 "W"

Es ist tatsächlich so gedacht, dass die Werte von den darunterliegenden Ifs überschrieben werden, falls auch Nummern zB für Vertrag oder Kontrakt vorliegen. Das ist also kein Fehler, sondern ein Feature :)

Problem
Die Ereignisprozedur beim Laden schaut sich natürlich nur an wie es beim ersten Datensatz des Endlosformulars steht. So steht bei allen Produkten im Textfeld Text 53 "V", weil für den ersten Datensatz eine Vertragsnummer existiert. Dies gilt aber nicht zwingend für den Rest der Datensätze. Wie kann ich also das Textfeld Text53 für jeden Datensatz im Endlosformular korrekt füllen? Ist das eine Frage wo die Ereignisprozedur ausgeführt wird oder ist mein Ansatz falsch?

Gerne her mit den Tipps! :)
Titel: Re: Einfaches Füllen von Feldern im Endlosformular
Beitrag von: DF6GL am Mai 04, 2020, 10:46:31
Hallo,

der Ansatz ist falsch.


erzeuge eine Public-Function (in einem Standardmodul), rufe diese Funktion in einer leeren Spalte im Abfrageentwurf (Evtl. Abfrage erstellen für die Datenherkunft des Endlos-Forms) auf  und binde das Textfeld an diese berechnete Spalte ("Befund").


Feld:  Befund: fktGetBefund([CONummer];[Vorvereinbarungsnummer];[Vertragsnummer];[Kontraktnummer])


ZitatPublic Function fktGetBefund(CONummer,Vorvereinbarungsnummer,Vertragsnummer,Kontraktnummer)
If nz(CONummer,0) <> 0 Then fktGetBefund = "CO"
If nz(Vorvereinbarungsnummer,0) <> 0 Then fktGetBefund = "VV"
If nz(Vertragsnummer,0) <> 0 Then fktGetBefund = "V"
If nz(Kontraktnummer,0) <> 0 Then fktGetBefund = "W"
End Function

Ob dies aber insgesamt so richtig zielführend ist, wage ich erst mal zu bezweifeln.
Titel: Re: Einfaches Füllen von Feldern im Endlosformular
Beitrag von: xoius am Mai 04, 2020, 11:00:59
Vielen Dank! Das hat wunderbar funktioniert und ohne Deine Hilfe wäre ich nie darauf gekommen.
Titel: Re: Einfaches Füllen von Feldern im Endlosformular
Beitrag von: ebs17 am Mai 04, 2020, 13:09:30
If Me. Kontraktnummer <> 0 Then ...
Ihr vergebt auch negative Nummern?
Zitat
... oder ist mein Ansatz falsch?
Ja, sehr.

Deine Nummern gehören in eine eigene abhängige Tabelle, und zwar als Datensatz pro Nummer und Vorgang. so könnte man den datensatz schon um einen Zeitstempel ergänzen und so zu einer zusätzlichen qualifizierten Information kommen.

Die gewünschte Information erhielte man aus dem Datensatz mit dem maximalen Zeitstempel für den Vorgang (Tabelle verknüpfen über Abfrage).