Listenfeld-Anzeige beschränken

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

bkleine
*
Beiträge: 16
Registriert: Di, 14.04.2009 09:12

Listenfeld-Anzeige beschränken

Beitrag 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
bkleine
*
Beiträge: 16
Registriert: Di, 14.04.2009 09:12

Re: Listenfeld-Anzeige beschränken

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Listenfeld-Anzeige beschränken

Beitrag 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
bkleine
*
Beiträge: 16
Registriert: Di, 14.04.2009 09:12

Re: Listenfeld-Anzeige beschränken

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Listenfeld-Anzeige beschränken

Beitrag 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
bkleine
*
Beiträge: 16
Registriert: Di, 14.04.2009 09:12

Re: Listenfeld-Anzeige beschränken

Beitrag von bkleine »

Danke,

das probier ich morgen früh gleich mal aus!

Bernhard
bkleine
*
Beiträge: 16
Registriert: Di, 14.04.2009 09:12

Re: Listenfeld-Anzeige beschränken

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Listenfeld-Anzeige beschränken

Beitrag von F3K Total »

Hallo,
versuchs mal an der Stelle mit

Code: Alles auswählen

.currentValue
statt

Code: Alles auswählen

.Text
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
Antworten