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..
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
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.
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.
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...
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?
Lieber die Optionsgruppe..
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.
Hallo,
ich hab doch schon den Code auch für die Optionsgruppen-Variante für die Vorauswahl des Listenfeldes geliefert... ::)
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?
@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.
Hallo,
was ist aber, wenn einer von den Verstorbenen wieder aufersteht? ;) ;D
....dann löschen wir den Datensatz direkt aus der Tabelle um möglichst keine Spuren zu hinterlassen... ;D :D
Hi,
das ist aber aus Günden der Nachverfolgbarkeit und des Datenschutzes nicht zulässig.... :o
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
Hallo,
Zitatgibt ne Fehlermeldung...
möglicherweise könnte man Dir ja helfen, wenn Du den großen Aufwand betreibst und die Fehlermeldung zitierst.
So was sollte man immer gleich tun, das erspart denen die Dir helfen wollen Rückfragen.
Ich möchte Dich auch noch mal auf meine Anmerkung zum falschen Datenmodell hinweisen, solltest Du nicht einfach abtun.