Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: mad am Januar 08, 2024, 16:21:37

Titel: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: mad am Januar 08, 2024, 16:21:37
Hallo Zusammen,

bräuchte mal wieder eure Hilfe.

Ich möchte in einer Abfrage anstatt der aktuellen Jahreszahl,

...Year(Now()) - Year(GebDatum) AS [Alter]...
die Jahreszahl aus einen Kombifeld "JFJahr" auswählen.

Das Kombifeld "JFJahr" befindet sich im Hauptfenster, die Abfrage findet Anwendung im 2.UF,
Zitat([frm_Jahresbericht_JF_Anzahl]![frm_Jahresbericht_JF_Zahlenuebersicht]![UF_Kreuztabelle_GeschlechterAlter]![JFJahr])

Wenn ich den Code so abändere funktioniert er aber nicht:
...([frm_Jahresbericht_JF_Anzahl]![frm_Jahresbericht_JF_Zahlenuebersicht]![UF_Kreuztabelle_GeschlechterAlter]![JFJahr]) - Year(GebDatum) AS [Alter]...
Rückmeldung ist:
Zitat([frm_Jahresbericht_JF_Anzahl]![frm_Jahresbericht_JF_Zahlenuebersicht]![UF_Kreuztabelle_GeschlechterAlter]![JFJahr])
wird nicht als gültiger Feldname oder Ausdruck erkannt!

Der bisherige gesamte Code lautet wie folgt:
TRANSFORM Count(B.PID) AS XY
SELECT B.Alter
FROM (SELECT V.I AS [Alter], V.Geschlecht, P.PID, P.OK FROM (SELECT T.I, tblgeschlecht.ID, tblgeschlecht.Geschlecht FROM T99 AS T, tblgeschlecht WHERE T.I BETWEEN 12 AND 19)  AS V LEFT JOIN (SELECT PID, Geschlecht, OK, Year(Now()) - Year(GebDatum) AS [Alter] FROM Personal WHERE statusID_P In (1,2) And gruppe like "JF*" And OK=fGetOK())  AS P ON (V.I = P.[Alter]) AND (V.ID = P.Geschlecht))  AS B
GROUP BY B.Alter
PIVOT B.Geschlecht;


Gruss
mad
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: PhilS am Januar 08, 2024, 18:28:30
Zitat von: mad am Januar 08, 2024, 16:21:37Wenn ich den Code so abändere funktioniert er aber nicht:
Code [Auswählen] Erweitern
...([frm_Jahresbericht_JF_Anzahl]![frm_Jahresbericht_JF_Zahlenuebersicht]![UF_Kreuztabelle_GeschlechterAlter]![JFJahr]) - Year(GebDatum) AS [Alter]...
Auf jeden Fall fehlt am Anfang noch: Forms!
Darüber hinaus passt dein Ausdruck nicht so recht zu deiner Aussage "Das Kombifeld "JFJahr" befindet sich im Hauptfenster, ...".
Da würde ich eher das folgende erwarten:
Forms![frm_Jahresbericht_JF_Anzahl]![JFJahr]
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: mad am Januar 08, 2024, 19:03:32
Auch wenn ich Forms in eckige Klammern setze,
[Forms]![frm_Jahresbericht_JF_Anzahl]![JFJahr]funktionierts leider nicht.

Gruss
mad
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: PhilS am Januar 08, 2024, 19:32:47
Zitat von: mad am Januar 08, 2024, 19:03:32funktionierts leider nicht.
Generell wäre eine etwas detailliertere Beschreibung als nur "funktioniert nicht" wünschenswert.

Ich hatte ja oben bereits darauf hingewiesen, dass deine Prosa-Beschreibung der Position des Steuerelements JFJahr deinem oben gezeigten Ausdruck widerspricht. - Was jetzt richtig ist, kann ich ohne weitere Informationen auch nicht erraten.
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: mad am Januar 08, 2024, 20:32:23
Hallo,

habe mal ein Bild (form.PNG) von der Entwurfsansicht des Formulars beigefügt.
Blauer Kringel ist das ungebundene Kombifeld "JFJahr".
Rotes Kreuz ist das Unterformular auf das die Kreuztabellen-Abfrage angewendet wird.

Nachfolgendes Bild (Fehlermeldung.PNG) zeigt die Fehlermeldung.

Zur Info: wenn ich statt dem Ausdruck "Year(Now())" bzw. "Forms![frm_Jahresbericht_JF_Anzahl]![JFJahr]" direkt eine Jahreszahl wie z.B. "2022" im Code eintrage dann kommt das entsprechende Ergebnis.

Ich hoffe diese Infos helfen mehr.


Gruss
Manfred

Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: ebs17 am Januar 09, 2024, 09:38:18
Formularbezüge zur Parameterübergabe in Abfragen einzusetzen ist nicht durchgehend eine gute Idee, in den Tiefen von Unterabfragen klappt da nichts mehr, in Kreuztabellenabfragen noch ein Stück weniger.

1. Test: Parameter deklarieren
PARAMETERS
   Forms!frm_Jahresbericht_JF_Anzahl!JFJahr Long
;
TRANSFORM
   COUNT(B.PID) AS XY
SELECT
   B.
ALTER
   FROM
   (
      SELECT
         V.I AS [Alter],
         V.Geschlecht,
         P.PID,
         P.OK
      FROM
         (
            SELECT
               T.I,
               tblgeschlecht.ID,
               tblgeschlecht.Geschlecht
            FROM
               T99 AS T,
               tblgeschlecht
            WHERE
               T.I BETWEEN 12 AND 19
         ) AS V
            LEFT JOIN
               (
                  SELECT
                     PID,
                     Geschlecht,
                     OK,
                     Year(Date()) - Forms!frm_Jahresbericht_JF_Anzahl!JFJahr AS [Alter]
                  FROM
                     Personal
                  WHERE
                     statusID_P IN(1, 2)
                        AND
                     gruppe like "JF*"
                        AND
                     OK = fGetOK()
               ) AS P
               ON
                  (V.I = P.[Alter])
                     AND
                  (V.ID = P.Geschlecht)) AS B
GROUP BY
   B.[ALTER]
PIVOT
   B.Geschlecht

Begleitend dazu:
Grundlagen - SQL ist leicht (16) - Abfragen mit Parametern (https://www.ms-office-forum.net/forum/showthread.php?t=374336)
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: PhilS am Januar 09, 2024, 12:19:29
Zitat von: mad am Januar 08, 2024, 20:32:23Blauer Kringel ist das ungebundene Kombifeld "JFJahr".
Mir fällt im Moment leider nichts sinnvolles zu diesem Problem ein. Eigentlich sollte das aus meiner Sicht mit dem Ausdruck
Forms![frm_Jahresbericht_JF_Anzahl]![JFJahr] funktionieren.

Was zu allerdings zur Sicherheit mal überprüfen solltest: Heißt das Combo-Steuerlement wirklich JFJahr oder vielleicht JF_Jahr oder Kombinationsfeld123?
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: mad am Januar 09, 2024, 15:17:11
Hallo Zusammen,

Phils: das Kombifeld heißt wirklich "JFJahr" - habe ich nochmals überprüft.

Habe nun die Parameteranweisung von ebs17,
ZitatPARAMETERS
   Forms!frm_Jahresbericht_JF_Anzahl!JFJahr Long;
...
und die berechnung des Alters wie folgt:
...
Forms!frm_Jahresbericht_JF_Anzahl!JFJahr - Year(GebDatum) AS [Alter]
...
in meinen Code mit aufgenommen.

Gesamtcode lautet nun:
PARAMETERS Forms!frm_Jahresbericht_JF_Anzahl!JFJahr Long;
TRANSFORM Count(B.PID) AS XY
SELECT B.Alter
FROM (SELECT V.I AS [Alter], V.Geschlecht, P.PID, P.OK FROM (SELECT T.I, tblgeschlecht.ID, tblgeschlecht.Geschlecht FROM T99 AS T, tblgeschlecht WHERE T.I BETWEEN 12 AND 19)  AS V LEFT JOIN (SELECT PID, Geschlecht, OK, Forms!frm_Jahresbericht_JF_Anzahl!JFJahr - Year(GebDatum) AS [Alter] FROM Personal WHERE statusID_P In (1,2) And gruppe like "JF*" And OK=fGetOK())  AS P ON (V.ID = P.Geschlecht) AND (V.I = P.[Alter]))  AS B
GROUP BY B.Alter
PIVOT B.Geschlecht;

Nun bekomme ich die Meldung, siehe Bild: "Meldung.PNG"
Wenn ich das Formular erneut aufrufe, so bleibt nun das UF "UF_Kreuztabelle_GeschlechterAlter" auf das ich die Kreuztabellen-Abfrage anwende "weis" - keine Anzeige.
Ich kann nun im Kombifeld "JFJahr" eine Jahreszahl auswählen und es passiert soweit erstmal nichts, UF "UF_Kreuztabelle_GeschlechterAlter" zeigt nicht an, ohne weitere Meldung.

Wenn ich die Kreuztabellen-abfrage die die Datensatzqelle für das UF bildet, alleine aufrufen und im Kombifeld "JFJahr" eine entsprechende Jahreszahl auswähle, dann verändert sich die Anzeige mit den richtigen Werten entsprechend. Nur in Verbindung als UF wird nichts angezeigt, sprich UF bleibt weis.

Wo und wie müssten den die Überschriften erstellt werden?

Gruss
mad
Titel: Re: Jahreszahl aus Kombifeld anstatt der aktuellen Jahreszahl verwenden
Beitrag von: mad am Januar 09, 2024, 18:11:01
Habe nochmals im Internet gesucht und beim Thema "feste Werte als Spaltenüberschriften" fündig geworden:

ZitatGeben Sie am Ende der PIVOT-Klausel in der SQL-Ansicht Ihrer Kreuztabellenabfrage IN und dahinter (in Klammern) eine durch Trennzeichen getrennte Liste von Werten ein, die als Spaltenüberschriften verwendet werden sollen. So erstellt beispielsweise IN (2007; 2008; 2009; 2010) vier Spaltenüberschriften: 2007, 2008, 2009, 2010.

Habe nun die letzte Codezeile wie folgt erweitert:
...
PIVOT B.Geschlecht In (1,2,3);

Nun funktionierts.

Danke für Eure Hilfe
Gruss
mad