Neuigkeiten:

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

Mobiles Hauptmenü

Gruppierten Bericht mit „verketteten“ Text

Begonnen von mad, Juli 01, 2021, 17:35:32

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,

aktuell habe ich einen Bericht (Unterschriftenliste) der auf nachfolgender Abfrage basiert. Die Abfrage wertet u.a. aus welche Aufgabe/n ,,AufgabeTitelID"  eine Person ,,PID_A"  innehat. Zusatzinfo: Im Vorfeld wird das UF durch ein Listenfeld im HF gefiltert und er Filter mit der Abfrage an den Bericht übergeben.

CODE Abfrage:
SELECT tblRegistrierungAufgabe.PID_A, tblAufgabeTitel.AufgabeTitel, tblRegistrierungAufgabe.AufgabeEnde, tblRegistrierungAufgabe.RegAufgabeID, Personal.PID, tblRegistrierungAufgabe.AufgabeID_A, tblRegistrierungAufgabe.AufgabeBeginn, tblAufgabeTitel.AufgabeTitelID, tblAufgabeTitel.AufgabeTitelKz, Personal.NameP, Personal.statusID_P
FROM tblAufgabeTitel INNER JOIN (Personal INNER JOIN tblRegistrierungAufgabe ON Personal.PID = tblRegistrierungAufgabe.[PID_A]) ON tblAufgabeTitel.[AufgabeTitelID] = tblRegistrierungAufgabe.AufgabeID_A
WHERE (((tblRegistrierungAufgabe.AufgabeEnde) Is Null) AND ((Personal.statusID_P)=1 Or (Personal.statusID_P)=2));

CODE beim öffnen des Berichts:
Private Sub btnAuswBericht_Click()

    If Me.UF_frmTM1_Zulassung.Form.FilterOn = True Then
        DoCmd.OpenReport "berAusBericht", acViewReport, , Me.UF_frmTM1_Zulassung.Form.Filter
    Else
        DoCmd.OpenReport "berAusBericht", acViewReport    ', , Me.uf.Form.Filter
   
    End If

End Sub

Da natürlich in der Abfrage eine Person, je nach Aufgaben mehrfach vorkommt, gruppiere ich im Bericht die Abfrage nach ,,NameP". Denn für die Unterschriftenliste muß jede Person nur einmal gelistet sein. Paßt erstmal soweit.

Nun möchten ich allerdings das die Aufgabenkürzel ,,AufgabeTitelKz" in einem separaten Textfeld ,,verkettet" mit dargestellt werden. Dazu habe ich mal in diversen Foren gegoogelt und folgendes gefunden:

https://www.ms-office-forum.net/forum/showthread.php?t=289729

Darauf hin haben die ,,Public Function SQLListe ...." angelegt und meine Abfrage wie folgt modifiziert:

CODE ,,verkettete" Abfrage:
SELECT tblRegistrierungAufgabe.PID_A, Personal.NameP, SQLListe("SELECT AufgabeID_A FROM tblRegistrierungAufgabe WHERE [PID_A] = " & [PID_A],",",",") AS Result
FROM Personal INNER JOIN (tblAufgabeTitel INNER JOIN tblRegistrierungAufgabe ON tblAufgabeTitel.AufgabeTitelID = tblRegistrierungAufgabe.AufgabeID_A) ON Personal.PID = tblRegistrierungAufgabe.PID_A
GROUP BY tblRegistrierungAufgabe.PID_A, Personal.NameP;
siehe auch Bild im Anhang incl. Ergebisbild (NameP für Bild ausgeblendet).

Jetzt werden mir zwar die ,,verketteten" Werte der  ,,AufgabeID_A" im Feld ,,Result" angezeigt. Ich würde aber gerne ,,AufgabeTitelKz" aus der Tabelle ,,tblAufgabeTitel" verkettet angezeigt bekommen.
Weis aber leider nicht wie! Hätte jemand eine Idee?

Mein nächstes Thema ist, daß jetzt beim öffnen des Berichts das Feld ,,AufgabeID_A" nicht mehr gefunden wird. Da es jetzt nicht mehr als eigenes Feld in der Abfrage vorhanden ist, sondern in der Zeichenkette,
ZitatSELECT tblRegistrierungAufgabe.PID_A, Personal.NameP, SQLListe("SELECT AufgabeID_A FROM tblRegistrierungAufgabe WHERE [PID_A] = " & [PID_A],",",",") AS Result
...
...
integriert ist. Gäbe es dazu auch noch eine Lösung?

Über Unterstützung würde ich mich wieder sehr freuen.

Gruss
mad

markusxy

Zitat von: mad am Juli 01, 2021, 17:35:32Jetzt werden mir zwar die ,,verketteten" Werte der  ,,AufgabeID_A" im Feld ,,Result" angezeigt. Ich würde aber gerne ,,AufgabeTitelKz" aus der Tabelle ,,tblAufgabeTitel" verkettet angezeigt bekommen.

Erstelle erstmal eine Abfrage, welche die korrekten Werte wie gewünscht liefert.
Danach kannst du dich damit beschäftigen, wie du daraus eine Liste machst.
Oder was ist dein logisches Problem?


mad

Hallo,

so habe ich mich doch vorgetastet, siehe erster Code. Bin ich zumindestens der Meinung.
Jetzt müssten halt statt der Zahlenwerten noch die Kürzel ,,AufgabeTitelKz" angezeigt werden.


Gruss
mad

markusxy

Zitat von: mad am Juli 02, 2021, 17:31:04Jetzt müssten halt statt der Zahlenwerten noch die Kürzel ,,AufgabeTitelKz" angezeigt werden.

Und was ist dabei das konkrete Problem?

Du nimmst für die Liste dann eben die Tabelle tblAufgabeTitel und Joinst über das Schlüsselfeld.
Da ist doch kein Unterschied.


mad

Hallo,

ZitatDu nimmst für die Liste dann eben die Tabelle tblAufgabeTitel und Joinst über das Schlüsselfeld.
Da ist doch kein Unterschied.

Genau das ist mein Problem, weil ich nicht weis wie.


Gruss
mad

markusxy

Zitat von: mad am Juli 04, 2021, 14:50:44Genau das ist mein Problem, weil ich nicht weis wie.

Aha, und was ist dir jetzt unklar?

Wie man einen Select schreibt weiß du ja schon.
Welches Feld du verknüpfen musst, geht aus deinem Bild hervor.

Erkläre also was das Problem ist.

mad

Hallo,

habe vieles übers Wochenende probiert und wieder verworfen.
Habe nun eine zweite Result-Spalte "Result1" zum testen angelegt.

ZitatResult1: SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE [PID_A] = " & [PID_A];",";",")

Dann kommt aber in der Spalte "#Fehler", siehe Bild im Anhang.

Ich sag's ganz offen, ich check's einfach nicht!
Dann müssen meine Feuerwehrkollegen einfach auf diese Zusatzinfo verzichten, davon geht die Welt auch nicht unter.


Gruss
mad

markusxy

Zitat von: mad am Juli 05, 2021, 14:41:20Hallo,

habe vieles übers Wochenende probiert und wieder verworfen.
Habe nun eine zweite Result-Spalte "Result1" zum testen angelegt.

Result1: SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE [PID_A] = " & [PID_A];",";",")
Dann kommt aber in der Spalte "#Fehler", siehe Bild im Anhang.

Das Feld [PID_A] gibts doch gar nicht in tblAufgabeTitel.  Das kann gar nicht funktionieren.
So hätte ich es versucht:

Result1: SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE AufgabeTitelID = " & AufgabeID_A;",";",")

mad

Hallo,

habe mal Deinen Vorschlag in die Abfrage übernommen, dann kommt folgende Meldung: siehe Bild im Anhang.



Gruss
mad

markusxy

@mad,
bei der ersten Nutzung von SQLListe ist es doch das gleiche Problem...
Also einfach nachsehen.




ebs17

Ja, wenn man in einer Abfrage gruppiert, müssen die Felder im SELECT-Teil entweder in die Gruppierung einbezogen werden, oder sie müssen aggregiert werden, oder sie haben einfach einen konstanten Inhalt.

Lösungsansatz: NICHT zuerst alle Tabellen in der Abfrage verwenden und dann versuchen, Verarbeitungskunststückchen auszuführen - da gelangt man nämlich wie erlebt schnell an Grenzen.

Hilfreicher ist der Ansatz: Erst rechnen, dann verknüpfen.
Man verwendet also nur die Tabellen und daraus die Felder, die für die eigentliche Berechnung nötig sind, zzgl. der Felder, die für eine spätere Verknüpfung nötig sind. Die Abfrage mit der Berechnung kann man dann im zweiten Schritt mit den für die Darstellung nötigen Resttabellen verknüpfen.

Step 1:
SELECT DISTINCT
   R.PID_A,
   SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE AufgabeTitelID = " & R.AufgabeID_A, ",", ",") AS Result
FROM
   tblRegistrierungAufgabe AS R

Step 2:
SELECT
   P.NameP,
   X.PID_A,
   X.Result
FROM
   (
      SELECT DISTINCT
         R.PID_A,
         SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE AufgabeTitelID = " & R.AufgabeID_A, ",", ",") AS Result
      FROM
         tblRegistrierungAufgabe AS R
   ) AS X
      INNER JOIN Personal AS P
      ON P.PID = X.PID_A
Ich hoffe, ich habe jetzt aus der Abstraktion heraus keine Fehler eingebaut.
Mit freundlichem Glück Auf!

Eberhard

mad

Hallo,

erstmal herzlichen Dank, habe Deine beiden SQL-Codes (funktionieren ohne Anpassung) für die Abfragen grundsätzlich verwendet, habe allerdings die Aliasnamen wieder in die Originalnamen geändert, dann kann ich das besser lesen.

geänderter Step1:
SELECT DISTINCT tblRegistrierungAufgabe.PID_A, SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE AufgabeTitelID = " & [AufgabeID_A],",",",") AS Result
FROM tblRegistrierungAufgabe;

geänderter Step2 (vereinfacht -> selbes Ergebis:
SELECT Personal.NameP, qryAufgabeListe_PID_A.PID_A, qryAufgabeListe_PID_A.Result
FROM qryAufgabeListe_PID_A INNER JOIN Personal ON qryAufgabeListe_PID_A.PID_A = Personal.PID;

finale Abfrage:
SELECT qryAufgabeListe_NameP.PID_A, qryAufgabeListe_NameP.NameP, SQLListe("SELECT Result FROM qryAufgabeListe_NameP WHERE [PID_A] = " & [PID_A],",",",") AS Result
FROM qryAufgabeListe_NameP
GROUP BY qryAufgabeListe_NameP.PID_A, qryAufgabeListe_NameP.NameP;

Gewünschtes Ergebnis, allerdings dauert es ca. 30-40 Sekunden bis diese Abfrage aufgrufen wird!

Dann habe ich es mal mit nur zwei Abfragen versucht:
Abf1:
SELECT DISTINCT tblRegistrierungAufgabe.PID_A, Personal.NameP, SQLListe("SELECT AufgabeTitelKz FROM tblAufgabeTitel WHERE AufgabeTitelID = " & [AufgabeID_A],",",",") AS Result
FROM Personal INNER JOIN tblRegistrierungAufgabe ON Personal.PID = tblRegistrierungAufgabe.PID_A;

Abf2:
SELECT qryAufgabeListe_PID_A.PID_A, qryAufgabeListe_PID_A.NameP, SQLListe("SELECT Result FROM qryAufgabeListe_PID_A WHERE [PID_A] = " & [PID_A],",",",") AS Result
FROM qryAufgabeListe_PID_A
GROUP BY qryAufgabeListe_PID_A.PID_A, qryAufgabeListe_PID_A.NameP;

Auch hier bekomme ich das gewünschte Ergebnis (sihe Bild im Anhang), aber auch hierbei dauert der Aufruf gute 30 Sekunden.

Könnte es daran liegen das zweimal die Funktion "SQLListe" durchlaufen wird?


Gruss
mad

mad

Hallo Zusammen,

habe mir nochmals über meinen letzten Satz gedanken gemacht.

Habe es jetzt wie folgt probiert:

Abf1:
SELECT DISTINCT tblRegistrierungAufgabe.PID_A, Personal.NameP, tblAufgabeTitel.AufgabeTitelKz
FROM Personal INNER JOIN (tblAufgabeTitel INNER JOIN tblRegistrierungAufgabe ON tblAufgabeTitel.AufgabeTitelID = tblRegistrierungAufgabe.AufgabeID_A) ON Personal.PID = tblRegistrierungAufgabe.PID_A;

Abf2:
SELECT qryAufgabeListe_PID_A.PID_A, qryAufgabeListe_PID_A.NameP, SQLListe("SELECT AufgabeTitelKz FROM qryAufgabeListe_PID_A WHERE [PID_A] = " & [PID_A],",",",") AS Result
FROM qryAufgabeListe_PID_A
GROUP BY qryAufgabeListe_PID_A.PID_A, qryAufgabeListe_PID_A.NameP;

Und es wird das richtige Ergebnis angezeigt in kürzester Zeit.


Vielen, vielen Dank an euch.


Gruss
mad