Listenfeld-Anzeige beschränken
Moderator: Moderatoren
Listenfeld-Anzeige beschränken
In einem Formular ordne ich Mitarbeiter einer Fa. neuen Funktions-Gruppen zu. Dazu wähle ich in einem Listen-Feld "Mitarbeiter" gemäß ihres Namens aus. In der Mitarbeitertabelle, aus der die Mitarbeiter in dem Listenfeld angezeigt werden, haben alle Mitarbeiter eine Rolle und eine Abteilung. In dem Formular würde ich gerne die Auswahl im Listenfeld "Mitarbeiter" durch Auswahl von Rolle und/oder Abteilung beschränken. Rolle sind Werte aus einer Rollen-Tabelle, Abteilungen aus einer Abteilungs-Tabelle.
Wenn ich jetzt frage:
Mitarbeiterliste nach "Rolle" und "Abteilung" einschränken?
und in "Rolle" eine Rolle und in "Abteilung" ein Abteilung ausgewählt werden kann, dann bekomme ich keinen, einen oder zwei Werte, von denen ich nicht weiß, wie ich ich sie in die Abfrage in dem oben erwähnten Listenfeld einbauen soll.
Die Tabelle Mitarbeiter hat folgende Felder
ID, Name, Kürzel, Rolle, Abteilung.
Das Problem besteht meiner Meinung darin, dass ich zwei ungebundene Formularfelder habe, die Werte annehmen können, die ich dann in einem anderen Feld innerhalb einer Abfrage vielleicht verwenden will.
Jede Hilfe ganz herzlich willkommen.
Grüße aus dem Schwarzwald
Bernhard
Wenn ich jetzt frage:
Mitarbeiterliste nach "Rolle" und "Abteilung" einschränken?
und in "Rolle" eine Rolle und in "Abteilung" ein Abteilung ausgewählt werden kann, dann bekomme ich keinen, einen oder zwei Werte, von denen ich nicht weiß, wie ich ich sie in die Abfrage in dem oben erwähnten Listenfeld einbauen soll.
Die Tabelle Mitarbeiter hat folgende Felder
ID, Name, Kürzel, Rolle, Abteilung.
Das Problem besteht meiner Meinung darin, dass ich zwei ungebundene Formularfelder habe, die Werte annehmen können, die ich dann in einem anderen Feld innerhalb einer Abfrage vielleicht verwenden will.
Jede Hilfe ganz herzlich willkommen.
Grüße aus dem Schwarzwald
Bernhard
Re: Listenfeld-Anzeige beschränken
Ich bin einen Schritt weiter: In einem Subformular lasse ich jetzt mit dieser Abfrage:
alle Werte aus der Mitarbeiterdatenbank anzeigen. Wenn die beiden vorher erwähnten Listenfelder param_Rolle und param_Department in den Filter eingebaut werden könnten, dann wäre das die Lösung. Wo kann ich das nachschlagen?
Danke!
Bernhard
Code: Alles auswählen
SELECT `Name`, `Vorname`, `Nameskuerzel`, `Rolle`, `Abteilung` FROM `datenbank`.`Mitarbeiter` AS `Mitarbeiter`
Danke!
Bernhard
Re: Listenfeld-Anzeige beschränken
Hi,
hier habe ich mal eine Code, den ich verwende, wenn ich ein Formular mit zwei Werten aus Kombinationsfeldern filtere etwa auf deine Parameter umgebaut:
Viel Erfolg
G R
hier habe ich mal eine Code, den ich verwende, wenn ich ein Formular mit zwei Werten aus Kombinationsfeldern filtere etwa auf deine Parameter umgebaut:
Code: Alles auswählen
Sub Filter_Rolle_Abteilung
Dim oDoc as Object, oForm as Object, oFeld as Object
Dim suchtext1 As String
Dim suchtext2 As String
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getByName("Dein Formular")
oFeld = oForm.getByName("param_Rolle")
suchtext1 = oFeld.text
oFeld = oForm.getByName("param_Department")
suchtext2 = oFeld.text
if suchtext1 >"0" and suchtext2 >"0" then
oForm.Filter = "( " + """Rolle""" + "= " + suchtext1 + " AND " + """Abteilung""" + "= " + suchtext2 + " )"
elseif suchtext1 >"0" and suchtext2 ="" then
oForm.Filter = "( " + """Rolle""" + "= " + suchtext1 + ")"
elseif suchtext1 ="" and suchtext2 >"0" then
oForm.Filter = "( " + """Abteilung""" + "= " + suchtext2 + ")"
elseif suchtext1 ="" and suchtext2 ="" then
oForm.Filter = ""
endif
oForm.reload
End Sub
G R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Listenfeld-Anzeige beschränken
Danke für den Code.
Zusatzfrage: Das Formular hat folgende Organisation:
Formulare
- FORM_grouplisting
- - listfeld1
- - stattToAdd
- - param_role
- - param_department
- - SUBFORM_stafflist
- - - tabellenKontrolfeld mit fünf textfeldern staff_initials, statt_firstname,staff_lastname, staff_role, staff_department,
Kannst du mich vielleicht noch auf den richtigen Weg schicken, wie ich die EinschränkungsAbfrage in das Subformular einbaue? Denn dein Code soll im Subformular und nicht im Formular wirken.
Ich danke dir schon mal.
Bernhard
Zusatzfrage: Das Formular hat folgende Organisation:
Formulare
- FORM_grouplisting
- - listfeld1
- - stattToAdd
- - param_role
- - param_department
- - SUBFORM_stafflist
- - - tabellenKontrolfeld mit fünf textfeldern staff_initials, statt_firstname,staff_lastname, staff_role, staff_department,
Kannst du mich vielleicht noch auf den richtigen Weg schicken, wie ich die EinschränkungsAbfrage in das Subformular einbaue? Denn dein Code soll im Subformular und nicht im Formular wirken.
Ich danke dir schon mal.
Bernhard
Re: Listenfeld-Anzeige beschränken
... ich versuche es ...
erstmal die Filterwerte auslesen:Jetzt fehlt mir hier die jeweilige Benennung der den Feldern "staff_role" und "staff_department" zugeordneten Tabellenspalten, nehmen wir an es wären: Rolle und Abteilung.
Dann wird der Filter auf das Subformular wie folgt gesetzt:
viel Erfolg G R
erstmal die Filterwerte auslesen:
Code: Alles auswählen
Sub Filter_Rolle_Abteilung
Dim oDoc as Object, oForm as Object, oFormSub as Object, oFeld as Object
Dim suchtext1 As String
Dim suchtext2 As String
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getByName("FORM_grouplisting")
oFormSub=oForm.getByName("SUBFORM_stafflist")
oFeld = oForm.getByName("param_Rolle")
suchtext1 = oFeld.text
oFeld = oForm.getByName("param_Department")
suchtext2 = oFeld.text
Dann wird der Filter auf das Subformular wie folgt gesetzt:
Code: Alles auswählen
if suchtext1 >"0" and suchtext2 >"0" then
oFormSub.Filter = "( " + """Rolle""" + "= " + suchtext1 + " AND " + """Abteilung""" + "= " + suchtext2 + " )"
elseif suchtext1 >"0" and suchtext2 ="" then
oFormSub.Filter = "( " + """Rolle""" + "= " + suchtext1 + ")"
elseif suchtext1 ="" and suchtext2 >"0" then
oFormSub.Filter = "( " + """Abteilung""" + "= " + suchtext2 + ")"
elseif suchtext1 ="" and suchtext2 ="" then
oFormSub.Filter = ""
endif
oFormSub.reload
End Sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Listenfeld-Anzeige beschränken
Danke,
das probier ich morgen früh gleich mal aus!
Bernhard
das probier ich morgen früh gleich mal aus!
Bernhard
Re: Listenfeld-Anzeige beschränken
hi,
funktioniert noch nicht ganz:
Eigenschaft oder methode nicht gefunden: suchtext = oform.text
das Feld param_role ist ein listenfeld, in dem ausgewählt werden kann, der param-wert ist ein integer.
aktueller Code:
funktioniert noch nicht ganz:
Eigenschaft oder methode nicht gefunden: suchtext = oform.text
das Feld param_role ist ein listenfeld, in dem ausgewählt werden kann, der param-wert ist ein integer.
aktueller Code:
Code: Alles auswählen
Sub Filter_Rolle_Abteilung
Rem Funktion des Gruppenlisting Formulars
Rem wenn die Felder Funktion und/oder Abteilung gewählt wurden
Rem dann soll die Mitarbeiterliste darunter dies berücksichtigen
Dim oDoc as Object, oForm as Object, oFormSub as Object, oFeld as Object
Dim suchtext1 As String
Dim suchtext2 As String
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getByName("form_grouplisting")
oFormSub=oForm.getByName("subform_stafflist")
oFeld = oForm.getByName("param_role")
suchtext1 = oFeld.text
oFeld = oForm.getByName("param_department")
suchtext2 = oFeld.text
if suchtext1 >"0" and suchtext2 >"0" then
oFormSub.Filter = "( " + "staff_role" + "= " + suchtext1 + " AND " + "staff_department" + "= " + suchtext2 + " )"
elseif suchtext1 >"0" and suchtext2 ="" then
oFormSub.Filter = "( " + "staff_role" + "= " + suchtext1 + ")"
elseif suchtext1 ="" and suchtext2 >"0" then
oFormSub.Filter = "( " + "staff_department" + "= " + suchtext2 + ")"
elseif suchtext1 ="" and suchtext2 ="" then
oFormSub.Filter = ""
endif
oFormSub.reload
End Sub
Re: Listenfeld-Anzeige beschränken
Hallo,
versuchs mal an der Stelle mit statt
Ausserdem Empfehle ich Dir das "Xray Tool" http://bernard.marcelly.perso.sfr.fr/index2.html, damit kann man seine Formulare analysieren und gucken welche Kontrollfelder welche Eigenschaften haben.
In Deinem Beispiel wäre der entsprechende Befehl:Da kannst Du dann sehen, das es hier kein ".Text" gibt, stattdessen der Wert mit ".CurrentValue" ausgelesen werden kann.
G R
versuchs mal an der Stelle mit
Code: Alles auswählen
.currentValue
Code: Alles auswählen
.Text
In Deinem Beispiel wäre der entsprechende Befehl:
Code: Alles auswählen
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getByName("form_grouplisting")
oFeld = oForm.getByName("param_role")
xray oFeld
G R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO