Seite 1 von 1
Listenfeld-Anzeige beschränken
Verfasst: Mo, 21.03.2011 11:21
von bkleine
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
Re: Listenfeld-Anzeige beschränken
Verfasst: Mo, 21.03.2011 13:59
von bkleine
Ich bin einen Schritt weiter: In einem Subformular lasse ich jetzt mit dieser Abfrage:
Code: Alles auswählen
SELECT `Name`, `Vorname`, `Nameskuerzel`, `Rolle`, `Abteilung` FROM `datenbank`.`Mitarbeiter` AS `Mitarbeiter`
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
Re: Listenfeld-Anzeige beschränken
Verfasst: Mo, 21.03.2011 22:51
von F3K Total
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:
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
Viel Erfolg
G R
Re: Listenfeld-Anzeige beschränken
Verfasst: Di, 22.03.2011 17:44
von bkleine
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
Re: Listenfeld-Anzeige beschränken
Verfasst: Di, 22.03.2011 20:30
von F3K Total
... ich versuche es ...
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
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:
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
viel Erfolg G R
Re: Listenfeld-Anzeige beschränken
Verfasst: Di, 22.03.2011 21:12
von bkleine
Danke,
das probier ich morgen früh gleich mal aus!
Bernhard
Re: Listenfeld-Anzeige beschränken
Verfasst: Mi, 23.03.2011 09:22
von bkleine
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:
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
Verfasst: Mi, 23.03.2011 20:01
von F3K Total
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:
Code: Alles auswählen
oDoc = ThisComponent
oForm = oDoc.drawpage.forms.getByName("form_grouplisting")
oFeld = oForm.getByName("param_role")
xray oFeld
Da kannst Du dann sehen, das es hier kein ".Text" gibt, stattdessen der Wert mit ".CurrentValue" ausgelesen werden kann.
G R