Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: kikimat am Februar 06, 2014, 09:22:22

Titel: Rechenfeld in Abfrage
Beitrag von: kikimat am Februar 06, 2014, 09:22:22
Hallo,

ich habe in einer Abfrage die Felder "Laufzeitende" und "Kündigungsfrist". In einem neuen Feld habe ich die Formel eingegeben: DatAdd("m";Nz(-[Kündigungsfrist]);([Laufzeitende])). Es funktioniert auch, dass mir in diesem Feld die Kündigungsfrist in Monaten vom Laufzeitende Datum abgezogen wird. Damit ich weiß, wann ich kündigen muss. Nun möchte ich als Kriterium noch eingeben "<=#31.12.2014#" damit ich sehe welche Verträge in diesem Jahr gekündigt werden müssen. Leider funktioniert dieser Filter bei mir nicht. Es werden trotzdem Verträge angezeigt, die erst in 2015 gekündigt werden müssen.
Hat jemand einen Tipp hierzu? Muss ich den Filter woanders setzen?

Gruß, Kiki
Titel: Re: Rechenfeld in Abfrage
Beitrag von: DF6GL am Februar 06, 2014, 14:41:07
Hallo,


für welche Spalte ist das Kriterium angegeben?

Zeige mal den SQL-String der Abfrage...
Titel: Re: Rechenfeld in Abfrage
Beitrag von: kikimat am Februar 07, 2014, 08:51:54
Tut  mir leid, dass erst jetzt antworte, aber ich war gestern nicht mehr online. Das Kriterium ist in der gleichen Spalte angegeben wie der Rechenausdruck. Ich wollte ja gern, dass das Ergebnis gleich gefiltert wird. Hier ist der SQL Code, Laufzeitende habe ich nur Mindestlaufzeit genannt.

SELECT tabGesellschaft.NameKurz, tabHäuser.Haus, tabVerträge.Vertragspartner AS Ausdr1, tabAnspPartner.Name, tabVerträge.Thema, tabVerträge.Vertragsbeginn, tabVerträge.Mindestlaufzeit, tabVerträge.Kündigungsfrist, tabVerträge.Verlängerung, tabVerträge.GekündigtZum, tabVerträge.VertragID, DateAdd("m",Nz(-[Kündigungsfrist]),([Mindestlaufzeit])) AS Ausdr1
FROM tabHäuser INNER JOIN (tabGesellschaft INNER JOIN (tabAnspPartner INNER JOIN tabVerträge ON tabAnspPartner.AnspID = tabVerträge.AnspID) ON tabGesellschaft.GesellschaftID = tabVerträge.GesellschaftID) ON tabHäuser.HausID = tabVerträge.HausID
WHERE (((tabVerträge.Mindestlaufzeit)<>0) AND ((DateAdd("m",Nz(-[Kündigungsfrist]),([Mindestlaufzeit])))<=#12/31/2014#));
[/size]
Titel: Re: Rechenfeld in Abfrage
Beitrag von: DF6GL am Februar 07, 2014, 11:36:42
Hallo,

welche Datentypen haben denn die relevanten Felder?

("Mindestlaufzeit" könnte eine Monatszahl sein, worauf auch "tabVerträge.Mindestlaufzeit)<>0"  hindeutet , "Laufzeitende" ein Datum...).  "Mindestlaufzeit"  muss zwingend den Datentyp "Datum/Uhrzeit" aufweisen, wobei dann die Prüfung auf "<>0"  eher  "not is null" lauten sollte.

Zudem kommt der Aliasname "Ausdr1" zweimal vor, was sicher so nicht gewollt ist.

Weiterhin: Reservierte Wörter (-->"Name") als Benamsung für eigenerstellte Objekte vermeiden oder mindestens in Eckklammern setzen.
Titel: Re: Rechenfeld in Abfrage
Beitrag von: kikimat am Februar 07, 2014, 11:42:11
Mindestlaufzeit ist ein Datum, Kündigungsfrist eine Zahl (Anzahl der Monate). Es klappt auch, dass mir in einer Zusatzspalte ausgerechnet wird, wann ich kündigen muss, also Mindestlaufzeit - Kündigungsfrist. Aber das Kriterium <=#31.12.2013# wird nicht erkannt, weil ich auch Daten angezeigt bekommen, die erst 2015 gekündigt werden müssen.
Titel: Re: Rechenfeld in Abfrage
Beitrag von: DF6GL am Februar 07, 2014, 12:06:02
Hallo,

nochmal:

Hast Du die Aliasnamen korrigiert, bzw. bei "Vertragspartner" weggenommen?
Hast Du "Name" in Eckklamern gesetzt?
Werden in Spalten "Ausdr1" "richtige" Datumsangaben angezeigt?
Gibt es da welche , die später als 31.12.2014 liegen?


oder mach mal einen Screenshot der angezeigten DS bei Abfrageausführung.
Titel: Re: Rechenfeld in Abfrage
Beitrag von: kikimat am Februar 07, 2014, 13:04:31
Ich habe die Aliasnamen jetzt korrigiert und nun funktioniert es.

Vielen Dank!