Neuigkeiten:

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

Mobiles Hauptmenü

Vorauswahl für Formular mit Listenfeld

Begonnen von ricog, Januar 23, 2011, 18:27:18

⏪ vorheriges - nächstes ⏩

ricog

Hallo Leute,

brauche wieder mal eure Hilfe...

Ich habe ein Formular, das auf der Tabelle tbl_Personal beruht.
Als Felder gibt es u.a. Nachname, Vorname, Geburtsdatum, Status...

Als Status gibt es 5 verschiedene Möglichkeiten (aktiv, passiv, AuE, ausgetreten, verstorben)

Ich wähle über ein Listenfeld Werte (Personen) aus, die im Formular angezeigt und bearbeitet werden können.
Soweit ist alles klar.

Jetzt möchte ich über eine Optionsgruppe eine Vorauswahl treffen.
Also, im Formular und im Listenfeld sollen z.B. nur Personen mit dem Status aktiv angezeigt werden.

Ich hoffe es ist einigermaßen klar was ich will...
Vielleicht kann mir jemand helfen

Danke..

DF6GL

Hallo,

ich würde dazu eine Tabelle für die Status-Werte anlegen und statt der Optgruppe ein Kombi nehmen.:

tblStatus:

StID     Status
1          aktiv
2          passiv
3   .
4   .
5   .


Kombi: "cmbStatus"

Datensatzherkunft: Select StID,StatusBez from tblStatus oder by Status

Spaltenanzahl: 2
Spaltenbreiten: 0cm:3 cm


und diese Ereignisprozedur für das Nach Aktualisieren-Ereignis des Kombis:

Sub cmbStatus_Afterupdate()
Me!Listenfeld1.Rowsource= "Select PersID, Nachname, Vorname  from tbl_Personal Where Status = " & nz(Me!cmbStatus,0) & " order by Nachname"
End Sub

das setzt voraus, dass in tbl_Personal in "Status" der jeweilige ID-Wert (STID) abgelegt wird.




Ohne die Status-Tabelle und Statusbezeichung statt Stid in tbl_Personal:


Sub OptgrStatus_Afterupdate()
Dim strKrit as String

Select case Me!optgrStatus
case1: strKrit="Aktiv"

case2: strKrit="passiv"

case3: strKrit="AuE"

.
.
.

Case else: strKrit=""
End Select

if Len(strKrit) > 0 then  strKrit = " Where Status ='" & strKrit & "'"

Me!Listenfeld1.Rowsource="Select PersID, Nachname, Vorname from tbl_Personal " & strKrit & " order by Nachname"
End Sub

ricog


Bitte nochmal langsam...

welche Datensatzherkunft für das Formular?
welche fürs Listenfeld und welche für die Optionsgruppe??...

Es existiert schon eine Tabelle, wo der Status zur Auswahl steht (genau wie du beschrieben), die nutze ich z.Z. als Grundlage für ein Kombifeld zur Eingabe des Status - in Tabelle wird aber der Status als Wort (also "aktiv"... usw.) abgelegt.

MzKlMu

Hallo,
Zitatin Tabelle wird aber der Status als Wort (also "aktiv"... usw.) abgelegt
Das solltest Du als erstes mal gelich ändern, in die Tabelle gehört die Zahl und nicht der Text, unbedingt und ohne Wenn und Aber um Einwänden von Dir gleich vorzubeugen.
Wenn Du es mit der Optionsgruppe machen willst, bleibt Dir ohnehin nichts anderes übrig.
Der Codevorschlag von Franz setzt die Zahl auch vorraus.

Was hast Du an dem Vorschlag von Franz nicht verstanden?
Datenherkunft für das Kombi wird die Tabelle mit dem Status. Je nach Auswahl im Kombi word über die Zahl gefiltert.
Gruß Klaus

ricog

ok, soweit verstanden, das mir der Zahl...

Datensatzherkunft fürs Formular ist dann tbl_Personal..??

Ich erstelle erst das frm mit der Datensatzherkunft tbl_Personal
dann füge ich dort ein Listenfeld ein, mit dem ich DS im frm basierend aus dem im Listenfeld gewählten Wert suche... (Name, Vorname)

Wie mache ich das jetzt im einzelnen mit der Optionsgruppe...

MzKlMu

Hallo,
ZitatWie mache ich das jetzt im einzelnen mit der Optionsgruppe...
Willst Du jetzt doch die Optionsgruppe und nicht dem Vorschlag von Franz folgen und ein Kombi nehmen?
Gruß Klaus

ricog


MzKlMu

Hallo,
erstelle eine Optionsgruppe mit 6 Optionen. Der Wert 6 für wieder alle anzeigen.
Im Ereignis "Nach Aktualisierung" der Optionsgruppe hinterlegst Du folgenden Code:
Private Sub NameDerOptionsgruppe_AfterUpdate()
    Select Case NameDerOptionsGruppe
        Case 1, 2, 3, 4, 5
            Me.Filter = "Status = " & Me!NameDerOptionsGruppe
            Me.FilterOn = True
        Case 6
            Me.filter = ""
            Me.FilterOn = False
    End Select
End Sub


Um das Formular immer ohne Filter zu öffnen, sollte im Ereignis "Beim Öffnen" des Formulars noch folgende 2 Zeilen.
Me.Filter = ""
Me.FilterOn = False


Anzumerken, wäre noch, dass das Datenmodell so nicht ganz richtig ist. Um den Status einem Mitglied zuzuordnen sollte eine weitere Tabelle angelegt werden in der der jeweils aktuelle Status mit einem Datum geführt wird. Denn ein Mitglied kann von Passiv nach Aktiv von Ausgetreten nach Eingetreten und umgekehrt wechseln. Das aber bei gestorben nicht zutreffen kann, gehört das Sterbedatum in die Stammdatentabelle. Ein Status Verstorben ist somit überflüssig, dieser Status ergibt sich automatisch, wenn ein Sterbedatum eingetragen ist.
Gruß Klaus

DF6GL

Hallo,

ich hab doch schon den Code auch für die Optionsgruppen-Variante für die Vorauswahl des Listenfeldes geliefert...  ::)

database

Hallo,

@MzKlMu
ZitatDas aber bei gestorben nicht zutreffen kann, gehört das Sterbedatum in die Stammdatentabelle.
Wenn aber ein Status verstorben vorhanden ist und jeder Staus mit einem Datum versehen ist so wie du das angeregt hast, kann ein Wechsel
von aktiv auf verstorben stattfinden (was ja leider auch der Realität entspricht) - das Sterbedatum steht dann neben dem Status in der Status-Tabelle und kann aus der Stammdatentabelle genommen werden.
Was m.E. auch im Sinne der Datenkapselung 'sauberer' aussieht - was meinst du?

MzKlMu

@Franz,
sorry, habe ich irgendwie überlesen.
@database
Du hast recht, eigentlich sollte man auch den Status "Gestorben" in der extra Tabelle führen.
Dann ist alles schön beisammen. Sozusagen bis zum letztmöglichen Ereignis.
Gruß Klaus

DF6GL

Hallo,
was ist aber, wenn einer von den Verstorbenen wieder aufersteht?   ;) ;D

database

....dann löschen wir den Datensatz direkt aus der Tabelle um möglichst keine Spuren zu hinterlassen...   ;D :D

DF6GL

Hi,

das ist aber aus Günden der Nachverfolgbarkeit und des Datenschutzes nicht zulässig.... :o

ricog

Hallo Leute,

habe jetzt die optionsgruppe von MzKlMu ausprobiert, gibt ne Fehlermeldung...

das Kombifeld habe ich auch ausprobiert - nach Auswahl im Kombifeld ist auf einmal das Listenfeld leer...

mal sehen ob ich die Fehler finde...  ???

Trotzdem schon erstmal danke für eure Hilfe.

Ciao Rico