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
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]
Auch wenn ich Forms in eckige Klammern setze,
[Forms]![frm_Jahresbericht_JF_Anzahl]![JFJahr]
funktionierts leider nicht.
Gruss
mad
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.
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
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)
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?
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
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