Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Richtig Gruppieren

Begonnen von langmantl10247, August 13, 2015, 09:48:41

⏪ vorheriges - nächstes ⏩

DF6GL

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.   
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

langmantl10247

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?

MzKlMu

Hallo,
wie heißt das Modul und wo genau ist es angelegt ?

Modul und Funktion müssen unterschiedliche Namen haben.
Gruß Klaus

langmantl10247

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  :(

MzKlMu

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.
Gruß Klaus

langmantl10247

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?

MzKlMu

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).
Gruß Klaus

langmantl10247

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;

MzKlMu

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.
Gruß Klaus

DF6GL

Hallo,

versuch es  so, vielleicht hilft es schon:


Ausdr1: SQLListe("SELECT Gruppenleiter FROM qryErweiterteGruppenleiter As EGL WHERE EGL.glID = " & [glID];",";",")
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

langmantl10247

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?

DF6GL

Hallo,


der "Raum" darf nicht als Gruppenspalte auftauchen....
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

langmantl10247

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?

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access