Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage: nicht darstellen wenn gleich wie

Begonnen von mad, Februar 02, 2016, 13:00:24

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,

habe wieder mal ein Problem.
Ich habe eine Abfrage (Bild1.jpg) erstellt mit der ich in einem Formularfeld das Jahr eingebe und somit filtere wer im ausgewählten Jahr zur Untersuchung muss.
Nun möchte ich aber, wenn er im ausgewählten Jahr bereits die Untersuchung besucht hat, dass dieser DS nicht mehr angezeigt wird.

Mit Worten ausgedrückt sollte es wie folgt funktionieren:
Wenn Jahr([naechsteG26]) gleich mit JahrletzteG26:Jahr([letzteG26]) dann diesen DS nicht anzeigen.

Wie muss ich das in meine Abfrage schreiben?

Über Hilfe würde ich mich sehr freuen.


Gruss
mad

el_gomero

Hallo,

sollte doch mit einem einfachen Kriterienausdruck klappen - unter Feld [naechsteG26] als Kriterium eintragen > [LetzteG26]. Evtl muss auf das Jahr referenziert werden, dazu kenne ich deine db zu wenig.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

mad

Hallo el_gomero,

habe es ausprobiert, bringt aber nicht das gewünschte Ergibnis.

Vielleicht hilft das noch:
Mit "Jahr([naechsteG26])" frage ich das Jahr ab z.B. 2016
Mit "JahrletzteG26: Jahr([letzteG26])" wird nur das Jahr der letzten Untersuchung ausgegeben.
Mit "JahrnaechsteG26: Jahr([naechsteG26])" wird nur das Jahr ner nächsten Untersuchung ausgegeben.

Hier die derzeitige Abfrage im SQL-Format:
SELECT Last(tblG26Untersuch.letzteG26) AS LetzterWertvonletzteG26, tblG26Untersuch.naechsteG26, Personal.Name, Personal.status, Year([letzteG26]) AS JahrletzteG26, Year([naechsteG26]) AS JahrnaechsteG26
FROM Personal INNER JOIN tblG26Untersuch ON Personal.Namekenn = tblG26Untersuch.Name
WHERE (((Year([naechsteG26]))=[Forms]![Test_frmG26aktuellJahrOffen]![G26offenJahr]))
GROUP BY tblG26Untersuch.naechsteG26, Personal.Name, Personal.status, Year([letzteG26]), Year([naechsteG26]), tblG26Untersuch.Name, Personal.Ortkenn
HAVING (((Personal.status) Like "Aktiv*") AND ((Personal.Ortkenn) Like [Ortkenn SC*-BK*-DU*-AS*]));


Vielleicht könntest Du nochmals drauf sehen.


Danke
mad

el_gomero

Hallo,

versuchs mal so:

SELECT LAST(tblG26Untersuch.letzteG26) AS LetzteG26,
       tblG26Untersuch.naechsteG26,
       Personal.Name,
       Personal.STATUS,
       YEAR([letzteG26])               AS JahrletzteG26,
       YEAR([naechsteG26])             AS JahrnaechsteG26
FROM   Personal
       INNER JOIN tblG26Untersuch
               ON Personal.Namekenn = tblG26Untersuch.Name
WHERE  YEAR([naechsteG26]) = [Forms]![Test_frmG26aktuellJahrOffen]![G26offenJahr] AND YEAR([naechsteG26])> Year(Date())
GROUP  BY tblG26Untersuch.naechsteG26,
          Personal.Name,
          Personal.STATUS,
          YEAR([letzteG26]),
          YEAR([naechsteG26]),
          tblG26Untersuch.Name,
          Personal.Ortkenn
HAVING ( ( ( Personal.STATUS ) LIKE "Aktiv*" )
         AND ( ( Personal.Ortkenn ) LIKE [Ortkenn SC*-BK*-DU*-AS*] ) );


wobei Name ein für Access reservierter Begriff ist und in Bezeichnern vermieden werden sollte - also umbenennen ; ) und den Bezeichner  [Ortkenn SC*-BK*-DU*-AS*] finde ich abenteuerlich ...
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

mad

Hallo el_gomero,

ich habe den Code wie folgt eingegeben:

SELECT Last(tblG26Untersuch.letzteG26) AS LetzteG26, tblG26Untersuch.naechsteG26, Personal.Name, Personal.STATUS, Year([letzteG26]) AS JahrletzteG26, Year([naechsteG26]) AS JahrnaechsteG26
FROM Personal INNER JOIN tblG26Untersuch ON Personal.Namekenn = tblG26Untersuch.Name
WHERE (((Year([letzteG26]))=[Forms]![Test_frmG26aktuellJahrOffen]![G26offenJahr]) AND ((Year([naechsteG26]))>Year(Date())))
GROUP BY tblG26Untersuch.naechsteG26, Personal.Name, Personal.STATUS, Year([letzteG26]), Year([naechsteG26]), tblG26Untersuch.Name;


Nun bekomme ich aber genau die beiden Kollegen die das Kriterium von nächsteG26 = letzterG26 haben.
Aber genau diese beiden sollen ausgeblendet sein und die angeziegt werden die nicht gleich sind.

Ich habe jetzt schon mit =, <>, <=, >=, etc. ausprobiert aber nie den gewünschten erfolg gehabt.

Was mache ich falsch?

Zur Info, daß mit dem Feldnamen "Name" werde ich im Anschluß ändern.
Das mit der Ortskenn benötige ich um entweder nur die Kollegen des entsprechden Ortes oder Alle zu filtern.

Gruss
mad

el_gomero

Hallo,

das versteh ich zwar nicht, kenne aber auch nicht die Inhalte zB deines Steuerelementinhalts im Form, etc.

Du kannst dich aber mal rantasten und zB Kriterien weglassen ...

SELECT LAST(tblG26Untersuch.letzteG26) AS LetzteG26,
       tblG26Untersuch.naechsteG26,
       Personal.Name,
       Personal.STATUS,
       YEAR([letzteG26])               AS JahrletzteG26,
       YEAR([naechsteG26])             AS JahrnaechsteG26
FROM   Personal
       INNER JOIN tblG26Untersuch
               ON Personal.Namekenn = tblG26Untersuch.Name
WHERE  YEAR([naechsteG26])> Year(Date())
GROUP  BY tblG26Untersuch.naechsteG26,
          Personal.Name,
          Personal.STATUS,
          YEAR([letzteG26]),
          YEAR([naechsteG26]),
          tblG26Untersuch.Name,
          Personal.Ortkenn
HAVING ( ( ( Personal.STATUS ) LIKE "Aktiv*" )
         AND ( ( Personal.Ortkenn ) LIKE [Ortkenn SC*-BK*-DU*-AS*] ) );

sollte dir nur die Datensätze ausgeben, die G26 > 2016 haben, der Mitarbeiter aktiv ist und dem Ortskriterium entspricht.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

mad

Hallo el_gomero,

ich habe die Where-Klausel wie folgt angepaßt:
WHERE Year([naechsteG26])=Year(Date())
Nun werden mir die vier die in 2016 zur Untersuchung müssen angezeigt. Nun möchte ich aber das die, die dann in 2016  zur Untersuchung waren [letzteG26] nicht dargestellt werden. Denn wenn sie zur Untersuchenung waren brauchen sie nicht mehr angezeigt werden.

In etwas sowas:
WHERE Year([naechsteG26])=Year(Date()) "OHNE" Year([letzteG26])=Year(Date())

Ich habe schon OR NOT oder AND NOT oder auch ohne NOT versucht, aber immer ohne den entsprechenden Erfolg.

Irgenwie bin ich zu doof.
Hast Du noch eine Idee?

Gruss
mad

el_gomero

Moin,

kann es sein, dass die Grundüberlegung nicht stimmt?

Du willst doch abfragen, wann die nächste Untersuchen je MA sein soll? Dann reicht doch ein Filter auf naechsteG26. LetzteG26 ist dabei vollkommen uninteressant. Zumal nach der nächsten Untersuchung die eingetragene letzte nicht mehr die letzte ist. Oder machst du da ein Update? Dann wäre das Datenmodell zu prüfen. So aus der Ferne betrachtet würde ich eine Tabelle mit allen Untersuchungsdaten des Mitarbeiters befüllen und abhängig vom größten Wert die nächste erforderliche berechnen lassen. War er zu Untersuchung wird das Datum eingetragen und die Berechnung (in einer Abfrage, nicht als gespeicherter Wert) neu durchgeführt. Vorhandene Probleme werden damit obsolet. Trifft es das?

Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

mad

#8
Hallo el_gomero,

diese Abfrage wie von Dir beschrieben habe ich bereits, ich möchte aber die sehen die im ausgewählten Jahr noch nicht bei der Untersuchung waren.
Ich habe mal einen Auszug aus meiner DB gemacht, sh. Anhang, von der Ausgangslage als ich den Beitrag startete.

Bitte das Formular "Test_frmG26aktuellJahrOffen" öffnen". Grundsätzlich ist im Auswahlfeld für das Jahr immer das aktuelle Jahr sichtbar. Beim Parameterfester gibts Du in diesem Fall immer "*" ein.
Jetzt solltest Du vier Personen (Test1 bis Test4) sehen. Es sollten aber nur die Personen Test2 u. Test4 sichtbar sein denn Test1 u. Test3 waren bereits bei der Untersuchung. Das kannst Du sehen wenn Du oben bei der Jahresauswahl "2019" eingibst.
Vielleicht macht es das ganze etwas verständlicher.

Gruss
mad

DF6GL

Hallo,


ohne jetzt die DB angesehen zu haben, hilft vielleicht:

http://www.donkarl.com/?FAQ3.16
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

el_gomero

Hallo mad,

in der Tabelle der Untersuchungen stehen als nächste für frka die Werte 6.6.16 und 1.5.19, für obbe 4.3.16 und 31.3.19.

Was denn nun? Kein Wunder, dass das Verwirrung gibt. Wieso werden da mehrere Termine vorgehalten? Hast du meine letzte Antwort gelesen? Nur letztes Untersuchungsdatum speichern und davon abhängig das nächste berechnen...
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

mad

Hallo el_gomero,

ich habe deine Antwort gelesen, allerdings hilft es mir nicht wenn nur der letzte Datum abgespeichert wird, ich benötige als Nachweis auch die alten Untersuchungsdatums.

Die Anregung von DF6GL habe ich auch ausprobiert, aber damit habe ich es auch nicht hinbekommen.

Ich versuche es jetzt nochmals mit einer Abfrage die ich vorschalte.
Vielleicht klappts.

Gruss
mad

el_gomero

Zitat
ich habe deine Antwort gelesen,  ...

Da bin ich mir nicht so sicher, denn ich habe geschrieben:
Zitat
...  So aus der Ferne betrachtet würde ich eine Tabelle mit allen Untersuchungsdaten des Mitarbeiters befüllen und abhängig vom größten Wert die nächste erforderliche berechnen lassen. ...

Lies noch mal, denk drüber nach und melde dich dann ;)
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

MaggieMay

Hallo,

ich hätte folgenden Vorschlag für dich:
SELECT Personal.Namekenn, Personal.Name, tblG26Untersuch.letzteG26, tblG26Untersuch.naechsteG26
FROM Personal INNER JOIN tblG26Untersuch ON Personal.Namekenn = tblG26Untersuch.Name
WHERE Year(tblg26untersuch.naechsteg26) = forms!test_frmG26aktuellJahroffen!G26offenJahr
AND personal.namekenn not in (Select name From tblG26Untersuch where year(naechsteg26) > forms!test_frmG26aktuellJahroffen!G26offenJahr) ;

mit der Annahme, dass es bereits einen neuen Eintrag gibt, wenn die Untersuchung bereits stattgefunden hat. Der Vergleich mit dem Tagesdatum erübrigt sich somit.
Freundliche Grüße
MaggieMay

el_gomero

Zitat
... mit der Annahme, dass es bereits einen neuen Eintrag gibt ...
es gibt eben sogar mehrere - s.o. Nochmal - nächesterG26 ist überflüssig. Aus dem letzten Untersuchungstermin wird in Abhängigkeit vom Alter des Mitarbeiters der nächst fällige Termin in einer Abfrage errechnet.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen