Neuigkeiten:

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

Mobiles Hauptmenü

Wert aus Abfrage für neue Abfrage verwenden

Begonnen von dolpho, Februar 07, 2023, 21:13:02

⏪ vorheriges - nächstes ⏩

dolpho

Hallo Access Gemeinde,
jetzt hänge ich mal wieder an einer Abfrage und finde den Weg heraus nicht. Sicher könnt ihr mir helfen:
Grundlage sind zwei Abfragen

1. liefert mir den Monat einer vorhandenen Auswahl mit Format([Feld];"mm")&Format([Feld];"jj") z.B. 0722

in
2. möchte ich bestimmte Daten filtern, die genau diesen Kriterien entsprechen
Hierzu habe ich das Feld erzeugt und als Kriterium zum Beispiel "Like mmjj!Mon eingegeben o.ä.
und obwohl es das Feld gibt, oder ich es über "Aufbauen" anwähle,
möchte access, dass ich den Parameterwert eingebe.

Was mach ich falsch?

Gruß dolpho

MzKlMu

Hallo,
bitte erkläre mal genauer was Du da vorhast.
Warum 2 Abfragen ?
Und was willst Du mit "Mon eingegeben", soll da der gewünschte Monat gefragt werden.
Und bitte zeige Code in Codetags formatiert.
Monat und Jahr geht auch kürzer:
Format([Datumsfeld];"mmjj")Das gezeigte Kriterium ist auch nur ein unvollständiges Schippsel.
Bitte zeige Abfragen immer vollständig als SQL Text in Codetags.
Gruß Klaus

dolpho

Guten Morgen Klaus,
da muss ich etwas weiter ausholen:
Aus drei ExcelTabellen und einer Datenbank möchte ich Daten auswerten. Im Prinzip jeden Monat einmal, diesmal aber auch rückwirkend monatsweise für für ein ganzes Jahr.
Dabei dachte ich mir, dass ich mir aus einer der drei Excel den aktuellen Monat anzeigen lasse (dafür eine Abfrage)
*****
SELECT TOP 1 Min(Format([F6],"mm") & Format([f6],"yy")) AS MON
FROM 2541
GROUP BY [2541].F6
HAVING ((([2541].F6)>1));
*****
und dann aus der DB die Daten für den entsprechenden Monat filtere:
*****
SELECT Sum(Nz([TagZert])) AS Zert, Sum(Nz([TagZertNeuCH])) AS ZertneuCH, Sum(Nz([TagZertNeuDE])) AS ZertneuDE, Sum(Nz([TagKiste])) AS Kiste, Sum(Nz([TagCont])) AS [Container], Format([Tagdatum],"mm") & Format([Tagdatum],"yy") AS Monjahr
FROM tblTag
GROUP BY Format([Tagdatum],"mm") & Format([Tagdatum],"yy")
HAVING (((Format([Tagdatum],"mm") & Format([Tagdatum],"yy"))=[abfrage]![mmjj]![MON]));
*****

von SQL habe ich bisher keine Ahnung, aber im Moment auch nicht die Zeit, mich einzulernen.

Helfen Dir diese Informationen weiter?

Gruß dolpho

MzKlMu

#3
Hallo,
das Vorhaben ist mir immer noch ein Rätsel.
Wieso soll die erste Abfrage den aktuellen Monat liefern ?
Der aktuelle Monaat ergibt sich doch aus dem heutigen Datum. Jetzt ist der aktuelle Monat der Februar, im März dann eben der März.
Und was willst Du hier mit Min ?
Das würde ohnehin den falschen Wert liefern, denn um Min zu bestimmen müsste erst das Jahr stehen und dann der Monat (JJMM). Das trifft auch für die Gruppierung zu.
Und warum setzt Du  Monat und Tag so umständlich mit 2x Format zusammen statt gleich "mmjj" zu verwenden, wie von mir oben gezeigt ?

PS:
Zitatvon SQL habe ich bisher keine Ahnung,
Das solltest Du aber schleunigst ändern, wenigsten die Grundlagen.
Gruß Klaus

dolpho

Hi Klaus,
sorry, jetzt hast Du mich gründlich missverstanden  ;)

Das Ziel ist, dass ich einen Auschnitt des Jahres 2022 als Datensatz einlege z.B 0422 und die Abfrage erkennt
"es handelt sich um die Daten aus dem April 2022" und dazu sucht es aus einer anderen Datenbank die summierten Werte dieses Monats.

Der Sinn ist, sich später alte Daten noch einmal zu nehmen und die RICHTIGEN Daten zusammenzuführen.
Sonst würde diese Abfrage ja nur für den Folgemonat der Ausführung funktionieren.

Das "Min" ist noch ein veraltetes Überbleibsel aus dem Versuch, nur einen Datensatz anzuzeigen.

Gruß dolpho

dolpho

Auch meine Formatkombination ist ein Relikt und schon aktualisiert.
Meine Daten gehören übrigens immer zum selben Monat. Daher ist es meines erachtens unerheblich ob eine Min oder Max o.ä. verwendet wurde.
LG dolpho

MzKlMu

#6
Hallo,
Zitatsorry, jetzt hast Du mich gründlich missverstanden
Dann erkläre es so, dass man es versteht.
Wieso der April 22 der aktuelle Monat sind soll ist mir immer noch unlar.
Die 1. Abfrage zeigt einen Datensatz und ohne Sortierung ist das ein beliebiger Datensatz aus der Tabelle 2541.

Und wie gesagt, die Reihenfolge MMJJ ist falsch, das muss JJMM sein, auch in der Gruppierung.

ZitatDas "Min" ist noch ein veraltetes Überbleibsel
Und warum prüfst Du die Codes nicht bevor Du diesen hier zeigst ?
Das trägt doch nur zur Verwirrung bei, ich sitze ja nicht vor Deinem PC.

Nachtrag:
ZitatAuch meine Formatkombination ist ein Relikt und schon aktualisiert.
Dann zeige doch bitte auch die aktuelle Version, ich kann doch nicht hellsehen.
Gruß Klaus

dolpho

Sorry, wenn ich hier Verwirrung gestiftet habe...
wie soll ich Codes prüfen, wenn ich keine Ahnung davon habe? alle Abfragen habe ich in Access erzeugen lassen und so lange probiert, bis es funktioniert hat.

Das Ziel dieses Codes:
****
SELECT TOP 1 Min(Format([F6],"mmyy")) AS MON
FROM 2541
GROUP BY [2541].F6
HAVING ((([2541].F6)>1));
****
ist ja nur, dass die Abfrage erkennt "aha es handelt sich um die Daten aus April 22" weil
die Daten dreier verknüpter Exceltabellen immer nur Daten aus einem Monat beinhalten, z.B. April 22
die verknüpfte Access DB jedoch viele Monate beinhaltet und ich nur die Daten der "aktuell eingelesenen Datensätze" mit den richtigen Monatsdaten verknüpft werden sollen.

Das war jetzt hoffentlich verständlich ?
Gruß dolpho

MzKlMu

#8
Hallo,
die 1. Abfrage brauchst Du nicht.
Du kannst mit DLookup aus der Tabelle den Monat direkt holen.
.
.
GROUP BY Format([Tagdatum],"yymm")
WHERE Format([Tagdatum],"mmyy") = Format(DLookup("F6","[2541],"mmyy")

Da Du nur ein Monat hast, kann die Gruppierung entfallen und statt Having ist Where zu verwenden.
Ungetestet.
Gruß Klaus

dolpho

Hallo Klaus,
bis jetzt hat es nicht zum Erfolg geführt, da ich immer eine Fehlermeldung "fehlender Operator" bekomme. Das gelbe Feld bleibt dann immer auf der letzten "mmyy" stehen.
Probiert habe ich es auch mit "mmjj" und auch mit "F6>1" weil in der ersten Zeile der Tabelle quasi die Überschriften drinstehen.

MzKlMu

#10
Hallo,
bitte zeige immer Deine Versuche, ich kann doch nicht hellsehen.
Welches gelbe Feld ?
Zitatweil in der ersten Zeile der Tabelle quasi die Überschriften drinstehen.
Es wäre nicht unwichtig gewesen, das gleich zu erwähnen.
Gruß Klaus

dolpho

SELECT Sum(Nz([TagZert])) AS Zert, Sum(Nz([TagZertNeuCH])) AS ZertneuCH, Sum(Nz([TagZertNeuDE])) AS ZertneuDE, Sum(Nz([TagKiste])) AS Kiste, Sum(Nz([TagCont])) AS [Container], Format([Tagdatum],"mm") & Format([Tagdatum],"yy") AS Monjahr
FROM tblTag
GROUP BY Format([Tagdatum],"yymm")
HAVING Format([Tagdatum],"mmyy") = Format(Dlookup("F6", "[2541], "mmyy")

die letzte "mmyy" bleibt markiert

MzKlMu

Hallo,
in welcher Tabelle stehen die Zeilenüberschriften, in der Exceltabelle (2541) ?
Gruß Klaus

dolpho

Hallo Klaus,
Access hat die Zeilenüberschriften beim Import selbst vergeben und die Zeilenüberschriften von Excel bilden die erste Zeile.
Scheinbar sind da Schriftzeichen drin, die Access nich haben möchte

Gruß dolpho

MzKlMu

Hallo,
was steht denn jetzt z.B. in der 1. Zeile der Exceltabelle?

Man kann beim Import angeben, ob in der 1.Zeile die Spaltennamen stehen, wenn das angehakt wird, wird die 1.Zeile als Feldname in Access übernommen. Diesen Import kann man dann speichern, sodass die Einstellung nicht noch mal gemacht werden muss.
Gruß Klaus