Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: langmantl10247 am August 13, 2015, 09:48:41

Titel: Richtig Gruppieren
Beitrag von: langmantl10247 am August 13, 2015, 09:48:41
Hallo, ich habe ein etwas verzwicktes Problem.
für eine Behindertenwerkstatt erstelle ich eine Datenbank.
Dort gibt es eine n:m Verbindung nämlich Gruppenleiter nach Arbeitsbereichen.
Struktur der Tabelle
ZUOID =Primärschlüsselfeld
GruppenleiterID
ArbeitsbereichID
GruppenleiterID und ArbeitsbereichID sind zudem eingeutig indiziert

Verknüpft ist diese Tabelle jeweils 1:n mit den Abfragen qryErweiterteArbeitsbereich und qryErweiterteGruppenleiter jeweils mit den gleichen Feldern.

In den einzelnen Abfragen git es noch als Ausgabefelder die Felder Gruppenleiter und Arbeitsbereich.
Ich  möchte jetzt via Abfrage, die Datensätze so gruppiert darstellen, dass wenn ein Arbeitswbereich mehrere Gruppenleiter hat, diese zusammen in einem Feld und mit Komma getrennt dargestellt werden.

bisher zeigt er mir dann in dem Arbeitsbereich zwei Datensätze an:
Bsp:
ArbeitsbereichID     Arbeitsbereich           Gruppenleiter
1                           Montage                   Herr Mustermann
1                           Montage                   Frau Musterfrau

Aussehen soll es aber so:
ArbeitsbereichID      Arbeitsbereich            Gruppenleiter
1                            Montage                     Herr Mustermann, Frau Mustermann

Wie setzt man dass um?
Danke schon mal im voraus und Grüße aus Berlin
Benedikt       
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 13, 2015, 10:26:06
Hallo,

warum diese Darstellung der Gruppenleiter als Liste in einem (Anzeige-)Feld ?

eine "SQL-Liste" muss mittels einer eigenen Funktion erstellt werden, siehe hier: http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 14, 2015, 10:34:32
Verstehe das Wiki nicht.
Habe die Gruppenleiter bereits Tabellenseitig per Listenfeld auswählen lassen, somit bekomme ich es hin, dass in dem Feld zwei Datensätze stehen, aber bei diversen Abfragen zeigt er mir immer nur die ID an
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 14, 2015, 13:52:32
Hallo,

Zitat"bereits Tabellenseitig per Listenfeld auswählen"

dreht es sich hierbei um ein Nachschlagefeld in der Tabelle?

wenn so, ist angeraten, diese "Dinger" herauszuwerfen und die Auswahl im Formular zu bewerkstelligen.

Zitatdass in dem Feld zwei Datensätze stehen

handelt es hier um ein "Mehrwertfeld"?  Auch dieses Mittel ist (in diesem Fall) nicht zu empfehlen.  Das Mehrwertfeld sollte durch eine 1:n -Tabellenkonstruktion ersetzt werden.
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 17, 2015, 07:47:21
Hallo DF6GL ich lade mal die DB hoch, kannste dir ja anschauen.
Wäre nett.
MFG aus Berlin
Benedikt
P.S. Bitte korrekturen hier erklären nicht als Datei anhängen, zumindestens nicht als ZiP Datei, unser Firmennetzwerk blockiert den Download. Datei als Ungezippte MDB oder ACCDB geht
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 18, 2015, 13:49:48
Hallo,

die Tabelle "tblArbeitsBereiche" fehlt in der DB... ansonsten kann man mit der DB nicht viel anfangen, um das Problem zu lösen.

Ein Nachschlagefeld habe ich gefunden für die Auswahl der "Anrede".  Diese Feldinhalte solltest Du in eine Tabelle überführen und das Nachschlagefeld aus der Tabelle entfernen. Die Auswahl der Anrede erfolgt durch ein passend eingestelltes Kombifeld im  entspr. Formular.
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 18, 2015, 14:00:47
Hallo Franz, DF6GL,
ja sorry, hier nun die aktualisierte Datenbank, das mit dem Feld Anrede, kannst du mir das bitte andern?
Wäre nett,
Grüße aus Berlin
Benedikt
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 18, 2015, 15:54:27
Hallo,

das mit dem Nachschlagefeld bekommst Du sicher selber hin..


Ansonsten solltest Du noch ein paar sinnvolle Beispieldaten in die Tabellen einfügen und sagen, wo die Aufzählungsliste erscheinen soll..
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 19, 2015, 08:51:18
Hi,
habe in die Datenbank jetzt ein paar Dummis gesetzt.
Das Feld soll als Kombinationsfeld im Formular Mitarbeiterdetails erscheinen.
Ich möchte, dass wenn in einem Bereich zwei Gruppenleiter sind, dass diese in der Komboliste als ein Datensatz angezeigt werden, also herrX; FrauY
Habe auch schon in die Tabelle Gruppenleiter Arbeitsbereicheichszuordnung einen datensatz angelegt, nämlich im Arbeitsbereich ID 1 sind Gruppenleiter ID1 und ID2
Hier die veränderte Datenbank
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 19, 2015, 09:29:21
Hallo,

vermutlich hast Du die falsche DB hochgeladen...
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 19, 2015, 14:38:59
Hallo Franz,
hier habe ich jetzt die DB nochmals aufgelegt.
Das Kombinationsfeld soll in das Formular frmMitarbeiterdetails rein, Also dort soll den Mitarbeitern die Gruppenleiter zugeordnet werden, Die M:N Tabelle habe ich noch nicht erstellt, weil ich vorher denke ich das Grundproblem lösen muss.
Jeder Gruppenleiter ist einem Arbeitsbereich zugeordnet. Manche Arbeitsbereiche haben aber je nach dem 2 Gruppenleiter.
Via Kombobox möchte ich jetzt die Gruppenleiter zu den Mitarbeitern zuordnen, exestieren jedoch zwei Gruppenleiter in dem Arbeitsbereich dann soll im Kombinationsfeld es so dargestellt werden: Gruppenleiter1; Gruppenleiter2
Ich denke, dass dann unabhängig vom Gruppenleiter selbst wenn es zwei sind diese als ein tensatz angelegt werden müssen.
Ziel soll später sein via Kombinationsfeld dem Mitarbeiter die Gruppenleiter zuzuordnen je Arbeitsbereich
Wie füge ich die beiden Einzelnen Gruppenleiter als einen DS zusammen?
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 19, 2015, 15:19:09
Hallo,

bist Du sicher, die Datenverhältnisse richtig zu interpretieren?

Soll es nicht eher so sein, dass Mitarbeiter einem bestimmen Arbeitsbereich zugeordnet werden müssen?

Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 20, 2015, 11:28:28
Hallo Franz,
ja ist so, ich ordne die Mitarbeiter den Arbeitsbereichen zu. Also es wird so Verknüpft. Es wird dann noch eine Datentabelle geben Mitarbeiter nach Bereichen.
nichts desto trotz, wenn ich eine Abfrage mache, zeigt er mir selbst wenn ich Gruppiere die Arbeitsbereiche, wo es zwei Gruppenleiter gibt, auch als zwei Datensätze an. Wie schaffe ich es, dass es bei einer Ausgabe dazu kommt, dass die Gruppenleiter mit einem , getrennt hintereinander stehen, wenn es zwei sind
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 20, 2015, 14:37:46
Hallo

und warum erstellst  Du die Tabelle und die Beziehungen nicht?

Erst wenn alle Tabellen und Beziehungen konstruiert sind, kann man sich Gedanken um Formulare oder Ähnliches machen..


Anbei..
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 24, 2015, 14:17:52
Hallo Franz, habe hier noch eine neue Version der Datenbank reingepackt, habe die andere Tabelle nicht erstellt, weil die sonst gezippt zu groß wird.
Brauchen wir aber für mein Problem glaube ich gar nicht.
Basis ist die qryErweiterteArbeitsbereiche.

Ich müsste wie bereits angeführt eine Abfrage hinbekommen, die es so abfragt, dass wenn einem Arbeitsbereich zwei Gruppenleiter zugeordnet sind, diese als ein DS angezeigt werden.
Bsp in der Datenbank ist KIWABO dort sind Hr. Freimark und Hr. Pohl zugeordnet,

in der Abfrage zeigt er es jetzt so an:
abID      Bereich    .....               Gruppenleiter
1            KIWABO                      Hr. Freimark
2            KIWABO                      Hr. Pohl

Ich möchte es aber so
abID          Bereich                      Gruppenleiter
1                KIWABO                    Hr. Freimark, Hr. Pohl

wie geht das
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 25, 2015, 08:09:31
Hallo,

??    Ich wiederhole mich:

baue die SQLListe-Funktion aus DbWiki.net (wie letzthin gezeigt) ein.


Entferne die Spalte Gruppenleiter aus der Abfrage und setze dort den Aufruf der SQLFunktion als berechnete Spalte ein.   
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 25, 2015, 08:41:09
Hallo, habe gemäß des Wikkis ein Modul erstellt

Public Function SQLListe(ByVal SQL As String, _
  Optional ByVal SepR As String = ";", Optional ByVal SepF As String = ";", _
  Optional ByVal NoNullFields As Boolean = True) As String
'
' Die Felder, die mit dem SQL-String gewonnen werden,
' werden feldweise mit SepF, datensatzweise mit SepR getrennt
' Wenn NoNullFields gesetzt ist, werden leere Felder unterdrückt
'
Dim DB As DAO.Database, RS As DAO.Recordset, I As Long, Res As String, Tmp As String
  On Error Resume Next
  Set DB = CurrentDb()
  Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot)
  If Err.Number <> 0 Then
    Res = "#Fehler"
    Err.Clear
  Else
    On Error GoTo 0
    Res = ""
    Do While Not RS.EOF
      Tmp = ""
      For I = 0 To RS.Fields.Count - 1
        If Not (NoNullFields And IsNull(RS(I))) Then Tmp = Tmp & SepF & RS(I)
      Next
      If Tmp <> "" Then Res = Res & SepR & Mid(Tmp, Len(SepF) + 1)
      RS.MoveNext
    Loop
    RS.Close
    If Res <> "" Then Res = Mid(Res, Len(SepR) + 1)
  End If
  SQLListe = Res
End Function


Und ihn über folgenden Code in die Abfrage eingebaut
Gruppenleiter: SQLListe("SELECT Gruppenleiter FROM qryErweiterteGruppenleiter WHERE glID = " & [glID];",";",")

Abfrage ist so aufgebaut,
tblArbeitsbereiche dort alle Felder plus in extra Spalte

Beim Ausführen der Abfrage zeigt er mir folgende Fehlermeldung an

Undefinierte Funktion 'SQLListe' in Ausdruck

Was ist da falsch?
Titel: Re: Richtig Gruppieren
Beitrag von: MzKlMu am August 25, 2015, 09:58:43
Hallo,
wie heißt das Modul und wo genau ist es angelegt ?

Modul und Funktion müssen unterschiedliche Namen haben.
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 25, 2015, 10:18:55
Das Modul heißt SQLListe und ist im Hauptverzeichnis der Datenbank als Modul angelegt.
Das mit der Funktion, dass die einen anderen Namen haben muss verstehe ich nicht, bitte erkläre mir das  :(
Titel: Re: Richtig Gruppieren
Beitrag von: MzKlMu am August 25, 2015, 10:22:40
Hallo,
Ich habe nicht geschrieben, dass die Funktion einen anderen Namen haben muss, sondern Modul und Funktion müssen unterschiedliche Namen haben. Nenne daher einfach das Modul um. Z.B. mdlSQLListe und lasse die Funktion.
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 25, 2015, 10:39:55
Hallo Klaus,
Habe jetzt das in mdlSQLListe geändert und die Funktion in die Abfrage eingefügt. Die Abfrage besteht aus der tblArbeitsbereiche, der Verknüpfungstabelle tblArbeitsbereicheGruppenleiter und der qryErweiterteGruppenleiter. Es ist wie folgt verknüpft. tblArbeitsbereiche über abID 1:n mit Verknüpfungstabelle tblArbeitsbereicheGruppenleiter. Die qryErweiterteGruppenleiter ist mit dem Feld glID mit der Verknüpfungstabelle tblArbeitsbereicheGruppenleiter über glID verknüpft. In der tblArbeitsbereicheGruppenleiter sind die Felder abID und glID beide mit Primärschlüssel.

Die Abfrage hat nun folgende Felder:
abID, Bereich, Kostenstelle, und Raum von tblArbeitsbereiche als Zusätzliches Feld habe ich folgende Funktion eingefügt Ausdr1: SQLListe("SELECT Gruppenleiter FROM qryErweiterteGruppenleiter WHERE glID = " & [glID];",";",")
so wie es im Wikki steht.
Jetzt kommt folgende Fehlermeldung bei der Ausführung der qry das angegebene Feld [glID] kann sich auf mehr als eine Tabelle beziehen die im From Abschnitt der SQL Anweisung angegeben wird

Die Fehlermeldung ist zumindestens schon mal anders, aber was ist jetzt falsch?
Titel: Re: Richtig Gruppieren
Beitrag von: MzKlMu am August 25, 2015, 10:51:19
Hallo,
die Fehlermeldung ist doch eindeutig. Das Feld  [glID] gibt es in mindestens 2 Tabellen. Du musst dem Feld den Tabellennamen voranstellen (durch ! getrennt).
Daher sollte man in einer DB keine gleichen Feldnamen haben. Daher hängt man an Fremdschlüsselfelder einfach ein _F hintendran. Damit hast Du solche Probleme erst gar nicht.
Zeige bitte mal die Abfrage "qryErweiterteGruppenleiter" (SQL).
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 25, 2015, 11:00:47
SELECT [Anrede] & " " & [Nachname] AS Gruppenleiter, [Nachname] & "; " & [Vorname] AS [Speichern unter], tblGruppenleiter.glID, tblGruppenleiter.Nachname, tblGruppenleiter.Vorname, tblGruppenleiter.Anrede
FROM tblGruppenleiter
ORDER BY tblGruppenleiter.Nachname, tblGruppenleiter.Vorname;
Titel: Re: Richtig Gruppieren
Beitrag von: MzKlMu am August 25, 2015, 11:19:16
Hallo,
lade die DB mal hier hoch. Mit einigen anonymen Daten und nur dem Teil der relevant ist.
Ich benötige aber eine Access2003 Version (MDB) ich kann keine ACCDBs öffnen.
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 25, 2015, 14:55:22
Hallo,

versuch es  so, vielleicht hilft es schon:


Ausdr1: SQLListe("SELECT Gruppenleiter FROM qryErweiterteGruppenleiter As EGL WHERE EGL.glID = " & [glID];",";",")
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 27, 2015, 10:00:42
Hallo Franz,
habe deinen Tip umgesetzt
und das Feld entsprechend in eine Abfrage eingesetzt, hier der SQL Code der Abfrage.
SELECT qryErweiterteArbeitsbereiche.abID, qryErweiterteArbeitsbereiche.Arbeitsbereich, qryErweiterteArbeitsbereiche.Kostenstelle, qryErweiterteArbeitsbereiche.Raum, SQLListe("SELECT Gruppenleiter FROM qryErweiterteGruppenleiter As EGL WHERE EGL.glID = " & [glID],",",",") AS Ausdr1
FROM qryErweiterteGruppenleiter RIGHT JOIN (qryErweiterteArbeitsbereiche INNER JOIN tblGruppenleiterzuordnung ON qryErweiterteArbeitsbereiche.abID = tblGruppenleiterzuordnung.abID_f) ON qryErweiterteGruppenleiter.glID = tblGruppenleiterzuordnung.glID_f
GROUP BY qryErweiterteArbeitsbereiche.abID, qryErweiterteArbeitsbereiche.Arbeitsbereich, qryErweiterteArbeitsbereiche.Kostenstelle, qryErweiterteArbeitsbereiche.Raum, SQLListe("SELECT Gruppenleiter FROM qryErweiterteGruppenleiter As EGL WHERE EGL.glID = " & [glID],",",",");


Er gibt mir aber das Ergebnis so aus
abID   Arbeitsbereich   Kostenstelle   Raum   Ausdr1
1   BBB Büro   28404   3   Frau Riedemann
2   Montage und Verpackung 1   92   1   Herr Kasimir
3   Montage und Verpackung 2   92   2   Herr Kehrer
4   KIWABO   28402   4   Herr Freimark
4   KIWABO   28402   4   Herr Pohl
5   Produktion   91   Lichthof   Herr Holland
6   AB Büro   93   5   Frau Arens
7   Kantine   120   Kantine   Frau Bogdanksi
7   Kantine   120   Kantine   Herr Mohr

Also wieder die beiden Arbeitsbereiche KIWABO und KANTINE jeweils als ein Datensatz mit den jeweiligen Gruppenleiter. Der Effekt, den ich erziehlen wollte, nämlich das er es so ausgibt.
7 Kantine 120 Kantine Frau Bogdanski, Herr Mohr macht er nicht.
Ich habe die Abfrage auf Gruppieren gesetzt, was muss ich jetzt noch ändern, damit es funktioniert?
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 27, 2015, 14:16:07
Hallo,


der "Raum" darf nicht als Gruppenspalte auftauchen....
Titel: Re: Richtig Gruppieren
Beitrag von: langmantl10247 am August 27, 2015, 15:14:43
Hallo, selbst wenn ich das Feld Raum aus der Abfrage rausschmeiße, ändert sich nix. Wenn ich über die Summenfunktion Gruppiere zeigt er bei allen Feldern Gruppieren an, dass kann ich nicht wegmachen?
Oder muss man da anders gruppieren?, so dass nur nach einzelnen Feldern gruppiert werden? Habe zwar die Möglichkeit in der Spalte Gruppieren zum Beispiel Minimum Wert auszuwählen, aber das ist ja auch nicht das was ich möchte. und dass ich in dem Feld dann die Gruppierung komplett rausnehme, geht nicht, entweder nur bei allen. oder bei keinem? Oder übersehe ich da was?
Titel: Re: Richtig Gruppieren
Beitrag von: DF6GL am August 27, 2015, 15:47:19
Hallo,

sehe gerade, dass die Spalten abID und Kostenstellen  auch entfernt werden müssen...Du kannst nicht Datensätze (zu einer Gruppe) zusammenfassen, bei denen sich der Wert pro DS ändert.