Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: dolpho am Februar 07, 2023, 21:13:02

Titel: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 07, 2023, 21:13:02
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 07, 2023, 23:28:28
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 05:48:43
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 10:28:30
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 11:10:33
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 11:20:29
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 11:23:02
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 11:43:49
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 12:04:23
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 12:57:17
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 13:10:28
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 13:22:48
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 13:27:16
Hallo,
in welcher Tabelle stehen die Zeilenüberschriften, in der Exceltabelle (2541) ?
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 13:57:57
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
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 14:44:31
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.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 14:56:00
Hallo,

vor dem Import steht dort

"Buchungsdatum"

und nach dem Import steht

"#Zahl!"

Gruß dolpho
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 15:14:49
Hallo,
ZitatMan kann beim Import angeben, ob in der 1.Zeile die Spaltennamen stehen,
hast Du das gelesen und auch beachtet?
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 17:28:07
Hallo Klaus,

in der Annahme, etwas total verkehrt zu machen, habe ich mal eine Abfrage auf die Tabelle gesetzt, nur um alle Felder zu sehen:
*****
SELECT [2541].Lagerort, [2541].Bewegungsart, [2541].Material, [2541].Materialbeleg, [2541].[Position Materialbel], [2541].Buchungsdatum, [2541].[Menge in ErfassME], [2541].ErfassungsMngEinh, [2541].[Soll/Haben-Kennz#], [2541].[Name des Benutzers], [2541].Referenz, [2541].Bestellung, [2541].Auftrag, [2541].Text, [2541].Belegkopftext
FROM 2541;
*****
daraufhin habe ich die Abfrage noch einmal neu gemacht (Jedoch auf die Tabelle)
diese Abfrage zeigt mir alle Datensätze:
*****
SELECT tblTag.TagDatum, tblTag.TagZert, tblTag.TagSerial, tblTag.TagWaage, tblTag.TagZertNeuCH, tblTag.TagZertNeuDE, tblTag.TagKiste, tblTag.TagCont
FROM tblTag;
*****
Füge ich nun Deine Zeilen an
.
GROUP BY Format([Tagdatum],"yymm")
WHERE Format([Tagdatum],"mmyy") = Format(DLookup("F6","[2541],"mmyy")

erhalte ich folgendes Ergebnis:

SELECT tblTag.TagDatum, tblTag.TagZert, tblTag.TagSerial, tblTag.TagWaage, tblTag.TagZertNeuCH, tblTag.TagZertNeuDE, tblTag.TagKiste, tblTag.TagCont
FROM tblTag;
GROUP BY Format([Tagdatum],"yymm")
WHERE Format([Tagdatum],"mmyy") = Format(DLookup("Buchungsdatum","[2541],"mmyy")

erhalte ich den Syntaxfehler (fehlender Operator) und die Markierung bleibt auf dem "Where"

Was habe ich nun falsch gemacht?

Gruß Lutz
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 17:43:07
Hallo,
liest Du eigentlich was ich schreibe?
ZitatMan kann beim Import angeben, ob in der 1.Zeile die Spaltennamen stehen,
Wenn in der 1.Zeile ein Text (Spaltenüberschrift) steht, wird das nachfolgende Datum nicht korrekt übernommen.
Du musst daher erst mal dafür sorgen dass die 1.Zeile als Spaltenüberschrift übernommen wird. Daher obiger Hinweis.
Daher noch mal die Frage: Ist der entsprechende Haken beim Import gesetzt?
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 17:47:41
Hallo Klaus,

genau so habe ich es gemacht, Haken gesetzt und Access hat die Überschriften automatisch gesetzt ?!

Gruß dolpho
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 17:50:21
Was ich aber gemacht habe ist, dass ich eine Verknüpfung zu dieser Tabelle habe und keinen Import.

Ist das vielleicht der Fehler?
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 18:18:15
jetzt habe ich die Verknüpfung noch einmal komplett gelöscht und neu importiert (Mit Haken Überschriften und nur die Daten, die ich brauche)
Das Ergebnis ist das selbe wie in
Zitat von: dolpho am Februar 08, 2023, 17:28:07erhalte ich den Syntaxfehler (fehlender Operator) und die Markierung bleibt auf dem "Where"
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 18:49:27
Hallo,
lade die DB mit beiden Tabellen (mit Beispeildaten) hier hoch.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 19:30:28
Die Datenbank und die relevanten Tabellen hängen an.

Danke und Gruß dolpho
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 19:38:10
Hallo,
kannst Du bitte mal die beiden Accesstabellen erläutern ?
Um welche Access TAbelle geht es jetzt ?


Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 08, 2023, 19:55:57
Am Ende brauche ich Daten aus alle Tabellen.
Das sind Umsatzzahlen die ich für eine Monatsauswertung von Hand aus den Tabellen schreibe und jetzt gerne automatisieren würde. Aus der 2541 brauche ich z.B. die Anzahl der Positionen der Bewegungsarten 601 und 105 und die Summe der "Menge ind ErfassME".
Aus der L-07 z.B die gleichen Werte für 601 und 101.
Zusätzlich aus den Paletten die Anzahl der BEZ-Euro.
Aus der TagesprotokollDB dann die Summen der gefilterten Spalten für den aktuell auszuwertenden Monat usw.

Am Ende entsteht also eine Formular und/oder ein Bericht der jeden dieser benötigten Einzelwerte enthält und ggf. mit einem Faktor multipliziert werden kann.
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: MzKlMu am Februar 08, 2023, 19:56:46
Hallo,
Schau mal, ob das passt:
SELECT Sum(TagZert) AS SummevonTagZert
    ,Sum(TagSerial) AS SummevonTagSerial
    ,Sum(TagWaage) AS SummevonTagWaage
    ,Sum(TagZertNeuCH) AS SummevonTagZertNeuCH
    ,Sum(TagZertNeuDE) AS SummevonTagZertNeuDE
    ,Sum(TagKiste) AS SummevonTagKiste
    ,Sum(TagCont) AS SummevonTagCont
    ,Format([Tagdatum], "yymm") AS Mon
FROM tblTag
WHERE Format([Tagdatum], "yymm") = Format(DLookUp("Buchungsdatum", "2541"), "yymm")
GROUP BY Format([Tagdatum], "yymm")

Oder so (ohne Mon und ohne Gruppierung):
SELECT Sum(TagZert) AS SummevonTagZert
    ,Sum(TagSerial) AS SummevonTagSerial
    ,Sum(TagWaage) AS SummevonTagWaage
    ,Sum(TagZertNeuCH) AS SummevonTagZertNeuCH
    ,Sum(TagZertNeuDE) AS SummevonTagZertNeuDE
    ,Sum(TagKiste) AS SummevonTagKiste
    ,Sum(TagCont) AS SummevonTagCont
FROM tblTag
WHERE Format([Tagdatum], "yymm") = Format(DLookUp("Buchungsdatum", "2541"), "yymm")
Wenn das Jahr in Excel Tabelle keine Rolle spielt und immer nur 1 Monat enthalten ist geht auch das:
SELECT Sum(TagZert) AS SummevonTagZert
    ,Sum(TagSerial) AS SummevonTagSerial
    ,Sum(TagWaage) AS SummevonTagWaage
    ,Sum(TagZertNeuCH) AS SummevonTagZertNeuCH
    ,Sum(TagZertNeuDE) AS SummevonTagZertNeuDE
    ,Sum(TagKiste) AS SummevonTagKiste
    ,Sum(TagCont) AS SummevonTagCont
FROM tblTag
WHERE Month([Tagdatum]) = Month(DLookUp("Buchungsdatum", "2541"))
Titel: Re: Wert aus Abfrage für neue Abfrage verwenden
Beitrag von: dolpho am Februar 09, 2023, 09:19:50
Hallo Klaus,

Du bist klasse!

Version 2 liefert genau das Ergebnis, was ich wollte!

Vielen lieben Dank
dolpho