Office: Abfrage mit Bedingung

Helfe beim Thema Abfrage mit Bedingung in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, habe ein kleines Problem mit einer Abfrage. In einem Formular wird mit nachfolgender Abfrage aus der Tabelle „tb_KontostandMonatsende“ der... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Broom, 5. Januar 2009.

  1. Abfrage mit Bedingung


    Hallo,
    habe ein kleines Problem mit einer Abfrage. In einem Formular wird mit nachfolgender Abfrage aus der Tabelle „tb_KontostandMonatsende“ der Betrag aus dem Feld „mGehaltv“ (Vormonat: ...[MonatMa] – “1“) im Feld „mGehalt“ angezeigt.

    SELECT tb_KontostandMonatsende.Jahr, tb_KontostandMonatsende.Monatszahl, tb_KontostandMonatsende.mGehalt AS mGehaltv
    FROM tb_KontostandMonatsende
    WHERE (((tb_KontostandMonatsende.Jahr)=[Formulare]![frm_Monatsplanung]![JahrMa]) AND ((tb_KontostandMonatsende.Monatszahl)=[Formulare]![frm_Monatsplanung]![MonatMa]-"1"));

    Dazu fragt die Abfrage im Formular „frm_Monatsplanung“ das Feld „JahrMa“ (aktuelle Jahreszahl, z.B. 2009) und das Feld „MonatMa“ (aktuelle Monatszahl, z.B. 1) ab. Die Monatszahl geht von 1 bis 12 (Januar – Dezember). Der Tabelleninhalt sieht so aus:
    Jahr Monatszahl mGehalt
    2008 ... ...
    2008 11 700,-
    2008 12 600,-
    2009 1 400,-

    Die Abfrage funktioniert nur nicht in dem ersten Monat des Jahres, da 1-1 = Null ergibt und dieser Monat nicht existiert. Gibt es die Möglichkeit die Abfrage so anzupassen, dass in diesem Fall auf den Dezember des Vorjahres zurückgegriffen wird?
    z.B. Ist Wert Feld „MonatMa“ = 1 dann nehme für Feld „MonatMa“ = 12 und für Feld „JahrMa“ = -1
    Weiß jemand dazu eine Lösung?
    Gruß
    Heinrich

    :)
     
  2. Hallo Heinrich,

    hier eine Antwort auf Dein
    Probier das mal mit der IIF - Funktion. Du hast schon alles korrekt erkannt *Smilie .

    Also vielleicht so für das Jahr:
    Code:
    Für den Monat kommst Du analog mit der IIF-Funktion weiter.

    HTH,
    Michael
     
    sw-blitz007, 7. Januar 2009
    #2
  3. Hallo Heinrich,
    probiers mal damit (ungetestet):
    Code:
     
  4. Abfrage mit Bedingung

    Mit der Funktion DateSerial könnte es z.b. so aussehen:
    Code:
    .. diese Variante wäre noch einfacher, würden Jahr und Monat in einem einzigem Datumsfeld (z.B. immer der 1. des Monats) gespeichert sein.
     
    Josef P., 7. Januar 2009
    #4
  5. Hallo Zusammen,
    erst mal Danke für die Vorschläge.
    Ich komme aber leider zu keinem Ergebnis.

    Michael, Deinen Vorschlag habe ich wie folgt erweitert:
    ...IIF([Formulare]![frm_Monatsplanung]![MonatMa] = 1, [Formulare]![frm_Monatsplanung]![JahrMa] - 1, [Formulare]![frm_Monatsplanung]![JahrMa]) AND IIF([Formulare]![frm_Monatsplanung]![MonatMa] = 1, [Formulare]![frm_Monatsplanung]![MonatMa] = "12", [Formulare]![frm_Monatsplanung]![MonatMa])

    Ich erhalte aber leider kein Ergebnis angezeigt bzw. wenn ich nur den Teil für das Jahr oder Monat verwende, wird alles angezeigt. Was habe ich hier falsch gemacht?

    Taheitall, Deinen Vorschlag habe ich so übernommen, erhalte aber immer wieder den Hinweis "Syntaxfehler im Abfrageausdruck...". Kenne mich aber in SQL nicht so aus um den Fehler zu finden.

    Hallo Peter,
    Dein Vorschlag ist zwar gut gemeint, aber ich kann die Tabelle mit den Datenfeldern leider nicht ändern und brauche daher eigentlich eine Lösung zu den mir vorgegeben Datenfeldern.

    Wer kann mir da weiterhelfen.
    Danke
    Gruß
    Heinrich
     
  6. Hallo Heinrich,
    zu deinem letzten Beitrag: Wenn du mit "Peter" Josef P. meinst, dann guck dir dessen Vorschlag noch einmal genau an. Er bezieht sich direkt auf die dir vorliegenden Felder. Der Zusatz sagt ja nicht umsonst "wäre" und "würden" ... *Smilie
    maike
     
    maikek, 8. Januar 2009
    #6
  7. Hallo,

    ersetzt die semicolons (*wink.gif* durch Kommas!!
    Sorry!
     
  8. Abfrage mit Bedingung

    so sollte es gehen:

    Code:
     
  9. Hallo Josef,
    bitte entschuldige die Namensverwechselung.
    Hallo Maike,
    ich bin Deinem Rat gefolgt und habe den Code von Josef wie folgt übernommen:

    SELECT tb_KontostandMonatsende.Jahr, tb_KontostandMonatsende.Monatszahl, tb_KontostandMonatsende.mGehalt AS mGehaltv
    FROM tb_KontostandMonatsende
    WHERE T.Jahr = Year(dateserial([JahrMa], [MonatMa] - 1, 1)) AND T.Monatszahl=Month(dateserial([JahrMa], [MonatMa] - 1, 1))

    Reaktion: Zuerst werden die Felder T.Jahr, MonatMa, T.Monatszahl und JahrMa abgefragt und dann erhalte ich folgenden Fehlerhinweis:
    „Dieser Ausdruck wurde falsch eingegeben, oder er ist zu komplex, um ausgewertet zu werden. Beispielsweise kann ein nummerischer Ausdruck zu viele komplizierte Elemente enthalten. Vereinfachen Sie den Ausdruck, indem Sie Teile des Ausdrucks Variablen zuweisen.“

    Was mache ich hier falsch? Müssen die Felder wie [JahrMa] eventuell ein besonderes Format haben?

    Hallo Takeitall,
    jetzt erhalte ich den Hinweis. "Syntaxfehler (Komma) in Abfrageausdruck..."
    Wie komme ich da jetzt weiter?

    Gruß
    Heinrich
     
  10. Josef hat in seinem Beispiel einen Aliasnamen für die Tabelle verwendet. Dieser muss dann natürlich konsequent in der ganzen SQL-Anweisung Anwendung finden (eine Tabelle T muss irgendwo herkommen):
    Code:
     
  11. Hallo Heinrich,

    Bei deinem Code musst du noch das Alias für deinen Tabellennamen sauber einsetzen, also folgendes einfügen/ändern:
    SELECT T.Jahr, T.Monatszahl, T.mGehalt AS mGehaltv
    FROM tb_KontostandMonatsende AS T
    WHERE T.Jahr = Year(dateserial([JahrMa], [MonatMa] - 1, 1)) AND T.Monatszahl=Month(dateserial([JahrMa], [MonatMa] - 1, 1))

    Ich rate dir auch, das Feld "Jahr" umzubenennen (in KontoJahr o.ä.), weil Jahr ein reserviertes Wort ist (z.B. für die Funktion Jahr bzw. Year).

    maike
     
  12. Eberhard hat in #10 den SQL-Ausdruck, wei ich ihn mir vorstellte übersichtlich dargestellt.
    Die Parameter [JahrMa] und [MonatMa] musst du allerdings noch mit deinen Formularbezügen ergänzen.

    Anm.: ich kürzte den SQL-Text im Beitrag #4, damit das Prinzip erkennbar wird, denn was hilft ein SQL-Text, wenn man aufgrund der Unübersichtlichkeit nicht mehr lesen kann, was darin passiert. *wink.gif*
     
    Josef P., 9. Januar 2009
    #12
  13. Abfrage mit Bedingung

    Hallo Josef,Maike, Eberhard
    dies eine geniale Lösung von Dir, sie funktioniert toll.
    Ich habe allerdings noch eine Steigerung, denn es gibt in dem Formular noch ein Feld das den vorVorwert anzeigen soll (im Januar den Wert aus November). Mit folgenden Code kann ich den Monat Januar abdecken:
    SELECT T.Jahr, T.Monatszahl, T.mGehalt AS mGehaltv
    FROM tb_KontostandMonatsende AS T
    WHERE T.Jahr = Year(dateserial([Formulare]![frm_Monatsplanung]![JahrMa], [Formulare]![frm_Monatsplanung]![MonatMa] - 1, 1)) AND T.Monatszahl=Month(dateserial([Formulare]![frm_Monatsplanung]![MonatMa], [Formulare]![frm_Monatsplanung]![MonatMa] - 2, 1))

    Aber den Monat Februar bekomme ich nicht hin? Kann man den Code noch erweitern?

    Gruß
    Heinrich
     
  14. WHERE T.Jahr = Year(dateserial([Formulare]![frm_Monatsplanung]![JahrMa], [Formulare]![frm_Monatsplanung]![MonatMa] - 2, 1)) AND T.Monatszahl=Month(dateserial([Formulare]![frm_Monatsplanung]![JahrMa], [Formulare]![frm_Monatsplanung]![MonatMa] - 2, 1))

    denke ich mal.
    maike

    Edit: guck mal in der VBA-Hilfe nach der Funktion DateSerial, die benötigt immer (Jahr, Monat, Tag) als Argumente.
     
  15. Hallo Maike,
    danke für den Hinweis. Den Code für den Monat Februar kann ich schon entsprechend anpassen. Aber der Code müsste den Monat Januar, Februar und die restlichen Monate zusammen abdecken.
    Gruß
    Heinrich
     
Thema:

Abfrage mit Bedingung

Die Seite wird geladen...
  1. Abfrage mit Bedingung - Similar Threads - Abfrage Bedingung

  2. Vorkommen von Kunden in mehreren Tabellen per Abfrage filtern

    in Microsoft Access Hilfe
    Vorkommen von Kunden in mehreren Tabellen per Abfrage filtern: Hallo Community, ich habe folgendes Problem beim Nutzen einer Access-Datenbank. Zunächst die Datenstruktur: [ATTACH] Dies sind die Tabellen meiner Datenbank. In der Tabelle "Adressliste"...
  3. SVerweis, WennDann oder Makro

    in Microsoft Excel Hilfe
    SVerweis, WennDann oder Makro: Hallo zusammen, Ich habe zwar ähnliche Themen gefunden aber komme trotzdem bei meinem Problem nicht weiter. Anbei meine Beispieldatei, da die echten Daten viel umfangreicher sind. Ich würde...
  4. Zusammenrechnen bestimmter Werte aus Abfragen

    in Microsoft Access Hilfe
    Zusammenrechnen bestimmter Werte aus Abfragen: Hallo Forum, ich hoffe mir kann jemand helfen. Mein Problem besteht im Moment darin, dass ich gruppierte Werte in einer weiteren Abfrage zusammen Rechnen muss. es geht speziell um Fahrzeuge und...
  5. Verwenden von Kriterien des Typs ODER zur Abfrage alternativer oder mehrerer Bedingungen

    in Microsoft Access Tutorials
    Verwenden von Kriterien des Typs ODER zur Abfrage alternativer oder mehrerer Bedingungen: Verwenden von Kriterien des Typs ODER zur Abfrage alternativer oder mehrerer Bedingungen Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access...
  6. If-Then-Abfrage nach Änderung einer Auswahl

    in Microsoft Access Hilfe
    If-Then-Abfrage nach Änderung einer Auswahl: Hallo, ich stehe etwas auf dem SChlauch und hoffe auch Unterstützung durch die Community: Ich habe eine Access-Datenbank, bei der es u.a. um die Planung von Lehrgängen geht. Es gibt eine...
  7. Abfrage mit zwei Bedingungen

    in Microsoft Excel Hilfe
    Abfrage mit zwei Bedingungen: Hallo zusammen, ganz neu in der Runde, hätte ich da auch gleich mal ein Problem. Ich habe ein Excel-File mit zwei Tabellenblättern. Im Tabellenblatt 1 ist eine Auflistung, die für mich...
  8. Mehrere Bedingungen, Wenn Abfrage, Suchen von Zahlen, Ausgabe in anderes Feld

    in Microsoft Excel Hilfe
    Mehrere Bedingungen, Wenn Abfrage, Suchen von Zahlen, Ausgabe in anderes Feld: Hallo, ich habe folgendes Excelproblem: Ich habe eine Tabelle, die wie folgt aussieht. [ATTACH] Die Werte kommen von einer Gültigkeitsprüfung aus dem 2ten Tabellenblatt. (Danke für die...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden