Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: mad am Januar 13, 2020, 10:51:20

Titel: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 13, 2020, 10:51:20
Hallo Zusammen,

wir haben seit der Zusammenlegung unserer zwei Feuerwehren ein Problem, wer für 25 bzw. 40 Jahre aktive Dienstzeit zu ehren ist.
Bisher hatten wir nur für die obigen Dienstjubiläen zu ehren, da hat unsere alte Abfrage noch ausgereicht.
Jetzt gibt es aber verschiedenste Ehrungen und der bereits angepaßte Code funktioniert noch nicht so richtig.

aktueller Code:
SELECT Personal.PID, Personal.Namekenn, Personal.NameP, Personal.EintrittFW1, Year([EintrittFW1]) AS EintrittsJahr1, IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1])) AS 25Jahre, IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1])) AS 40Jahre, tblEhrung.EhrungDatum, Personal.Adresse, Personal.HausNr, Personal.PLZ, Ortsteile.Ort, Personal.GebDatum, tblEhrung.EhrungTitelID_E
FROM (Ortsteile INNER JOIN Personal ON Ortsteile.OrtID = Personal.OrtID_F) LEFT JOIN (tblEhrung RIGHT JOIN tblRegistrierungEhrung ON tblEhrung.EhrungID = tblRegistrierungEhrung.EhrungID_E) ON Personal.PID = tblRegistrierungEhrung.PID_E
WHERE (((Personal.statusID_P)=1 Or (Personal.statusID_P)=2) AND ((tblRegistrierungEhrung.PID_E) Is Null)) OR (((Personal.statusID_P)=1 Or (Personal.statusID_P)=2) AND ((tblRegistrierungEhrung.PID_E) Is Null) AND ((tblRegistrierungEhrung.StatusRegID_E)<>2))
GROUP BY Personal.PID, Personal.Namekenn, Personal.NameP, Personal.EintrittFW1, Year([EintrittFW1]), IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1])), IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1])), tblEhrung.EhrungDatum, Personal.Adresse, Personal.HausNr, Personal.PLZ, Ortsteile.Ort, Personal.GebDatum, tblEhrung.EhrungTitelID_E
HAVING (((IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1]))) Is Not Null)) OR (((IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1]))) Is Not Null))
ORDER BY Personal.EintrittFW1;


Was soll ausgewertet werden:
Wenn ein Kollege 25 Jahre aktive Dienstzeit erreicht hat soll er entsprechend in der Abfrage ,,gry25_40JahreAktiv" angezeigt werden. Sobald er hierfür geehrt wurde soll er natürlich nicht mehr erscheinen.
Dasselbe gilt für 40 Jahre aktive Dienstzeit.
Ich habe das Problem die nachfolgen ,,EhrungTitelID_E"s einzubauen so das auch nur diese beiden Titel mit einbezogen werden und der Rest für diese Abfrage außen vor bleibt.

25 Jahre: ,,EhrungTitelID_E" = 47
40 Jahre: ,,EhrungTitelID_E" = 48
,,EhrungTitelID_E" befindet sich in der Tabelle ,,tblEhrung"

Nun habe ich Testweise in der Tabelle ,,tblEhrung" für zwei Kollegen jeweils eine andere Ehrung (50 u. 56) eingetragen. Dann sollten aber die beiden Kollegen noch in  der Abfrage ,,gry25_40JahreAktiv" angezeigt werden, da Sie nicht für ,,EhrungTitelID_E" 47 u. 48 geehrt wurden sondern für was anderes.
Zum testen hab ich mal eine Test-DB mit eingestellt.
Ich habe schon einiges ausprobiert wie denn die beiden ,,EhrungTitelID_E" 47 u. 48 berücksichtigt werden könnten, aber alles ohne Erfolg. Drum habe ich die Spalte ,,EhrungTitelID_E" für die Muster-DB erstmal ohne Kriterium belassen, sonst wird erstmal gar nichts angezeigt.

Die wichtige Abfrage ist ,,gry25_40JahreAktiv".

Könnte mir jemand Hilfestellung geben.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: DF6GL am Januar 13, 2020, 12:59:24
Hallo,

ohne jetzt diesen zerkochten Abfragestring-Eintopf angesehen zu haben, fehlt in der DB essentiell oder ist falsch:

-- die Beziehungen zwischen den Tabellen.
-- falscher Aufbau der Tabellen.
-- Zuordnung eines EhrungTitels an eine Person.

Wenn das nicht korrigiert wird, nützen auch die komplexesten Abfragen nichts.

Haben wir sicherlich schon öfters bemängelt und auf Umbau gedrängt.


Wenn eine Person mehrere Ehrungen erhalten kann, so ist diese Tatsache mit einer n-Tabelle ("tblPersonenEhrungen") abzubilden.

Darin sind die PersID, die Ehrung(Titel)ID, das EhrungsDatum und zusätzliche evtl.  benötigte Infofelder zu führen  (Das Ganze ist einfach eine Ehrungs-Historie(ntabelle) ).

Dass eine bestimmte Ehrung aussteht, bzw. nicht erfolgt ist, ist am Fehlen des Ehrungsdatums ersichtlich, im Umkehrschluss bedeutet ein vorhandenes Ehrungsdatum eben, dass die entspr. Ehrung geschehen ist.

Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 13, 2020, 18:11:58
Hallo,

ich der Original-DB gibt es natürlich die Beziehungen unter den Tabellen. Habe diese nun auch in der Muster-DB aktualisiert.
Der Aufbau der Tabellen ist wie in einem früheren Beitrag im Forum vorgeschlagen. Nur hier auf ein anderes Thema angewandt.

ZitatDass eine bestimmte Ehrung aussteht, bzw. nicht erfolgt ist, ist am Fehlen des Ehrungsdatums ersichtlich, im Umkehrschluss bedeutet ein vorhandenes Ehrungsdatum eben, dass die entspr. Ehrung geschehen ist.
Leider ist es in diesem Fall nicht so einfach, denn es kann natürlich auch Ehrungen mit Datum geben. Aber in dieser Abfrage sollen nur die beiden Ehrungen:
Zitat25 Jahre: ,,EhrungTitelID_E" = 47
40 Jahre: ,,EhrungTitelID_E" = 48
,,EhrungTitelID_E" befindet sich in der Tabelle ,,tblEhrung"
berücksichtigt werden.
Ich habe in der angehängten Muster-DB aus der Abfrage aus übersichtsgründen mal die Felder die zur Adressen-Info gehören rausgenommen.
Sowie auch den Code etwas angepaßt:
SELECT Personal.PID, Personal.NameP, Personal.EintrittFW1, Year([EintrittFW1]) AS EintrittsJahr1, IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1])) AS 25Jahre, IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1])) AS 40Jahre, tblEhrung.EhrungDatum, tblEhrung.EhrungTitelID_E
FROM Ortsteile INNER JOIN (Personal LEFT JOIN (tblEhrung RIGHT JOIN tblRegistrierungEhrung ON tblEhrung.EhrungID = tblRegistrierungEhrung.EhrungID_E) ON Personal.PID = tblRegistrierungEhrung.PID_E) ON Ortsteile.OrtID = Personal.OrtID_F
GROUP BY Personal.PID, Personal.NameP, Personal.EintrittFW1, Year([EintrittFW1]), IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1])), IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1])), tblEhrung.EhrungDatum, tblEhrung.EhrungTitelID_E
HAVING (((IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1]))) Is Not Null) AND ((([tblEhrung].[EhrungTitelID_E])<>47) Is Null)) OR (((IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1]))) Is Not Null) AND ((([tblEhrung].[EhrungTitelID_E])<>48) Is Null))
ORDER BY Personal.EintrittFW1;

Aber leider sollte in der aktuellen Konstellation auch der Kollege "webe" (PID = 3) in der Abfrage "gry25_40JahreAktiv" angezeigt werden. Den er hat zwar schon eine Ehrung aber eben nicht die für "40 Jahre: ,,EhrungTitelID_E" = 48".
Leider wird er noch nicht angezeigt.

Gruss
mad

Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 15, 2020, 15:33:00
Hallo Zusammen,

habe nun mal meine Abfrage eingekürzt, auf das nötigste und etwas angepasst. Nun wird auch schon "fast" das richtige Abfrageergebnis erreicht.
Code:
SELECT DISTINCT Personal.PID, Personal.Namekenn, Personal.NameP, Personal.EintrittFW1, Year([EintrittFW1]) AS EintrittsJahr1, IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1])) AS 25Jahre, IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1])) AS 40Jahre, Personal.statusID_P, tblRegEhrung2540.PID_E
FROM Personal LEFT JOIN (tblEhrung2540 RIGHT JOIN tblRegEhrung2540 ON tblEhrung2540.EhrungID = tblRegEhrung2540.EhrungID_E) ON Personal.PID = tblRegEhrung2540.PID_E
GROUP BY Personal.PID, Personal.Namekenn, Personal.NameP, Personal.EintrittFW1, Year([EintrittFW1]), IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1])), IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1])), Personal.statusID_P, tblRegEhrung2540.PID_E
HAVING (((IIf((Year(Now())-Year([EintrittFW1])) Mod 40>=25,Year(Now())-Year([EintrittFW1]))) Is Not Null) AND ((Personal.statusID_P)=1 Or (Personal.statusID_P)=2) AND ((tblRegEhrung2540.PID_E) Is Null)) OR (((IIf((Year(Now())-Year([EintrittFW1])) Mod 45>=40,Year(Now())-Year([EintrittFW1]))) Is Not Null) AND ((Personal.statusID_P)=1 Or (Personal.statusID_P)=2) AND ((tblRegEhrung2540.PID_E) Is Not Null))


Allerdings werden Kollegen die beide Ehrungen erhalten habe und noch nicht ausgeschieden sind immer noch angezeigt.
Gibt es die Möglichkeit wenn ein Kollege ("PID_E" aus Tabelle "tblRegEhrung2540") beide Ehrungen ("EhrungTitelID_E" 47 u. 48 aus Tabelle "tblEhrung2540") erhalten hat, in den Code einzubauen und entsprechend auszublenden?


Gruss
mad


Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: DF6GL am Januar 15, 2020, 19:19:14
Hallo,

versuch:

.... EhrungTitelID_Not in ( 47, 48)...
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 15, 2020, 19:42:10
Hallo,

jetzt werden alle ausgeblendet die die Ehrung 47 oder 48 haben.
Ich möchte aber alle ausblenden die beide Ehrungen haben, wenn der Kollege nur eine von beiden hat soll er eingeblendet bleiben.

Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: ebs17 am Januar 15, 2020, 19:49:54
In Deiner Personaltabelle gibt es mehrere Felder für Eintritt und Austritt. Wenn Du Dich in Deinen sehr umständlichen Abfragen auf nur den ersten Eintritt konzentrierst, ist ein Versagen früher oder später kaum zu vermeiden - es sei denn der erste Eintritt berechtigt lebenslang zu Ehrungen, egal auch, ob ausgetreten oder gestorben.

Mit anderen Worten: Das Datenmodell ist nicht stimmig und somit auch nicht wert, darauf aufzubauen und seine Zeit zu investieren.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 16, 2020, 07:42:27
Hallo,

ZitatMit anderen Worten: Das Datenmodell ist nicht stimmig und somit auch nicht wert, darauf aufzubauen und seine Zeit zu investieren.
Ja das ist soweit richtig, allerdings arbeite ich schon dran, hätte das der Vereinfachung wegen erstmal ausgeblendet.

Aber wenn es schon angesprochen wird, hier meine aktuellen Ergebnisse:
In meinem aktualisierten Formular gibt es bereits einen Code der die Dienstzeit unter Berücksichtigung dieser Gegebenheiten berücksichtigt:
Private Function Get_Dauer() As Integer
Dim dAus1 As Date, dAus2 As Date, dDauer As Integer
    If Nz(Me![AusgeschiedDatum], 0) > 0 Then
        If Nz(Me![AustrittFW1], 0) = 0 Then
            dAus1 = Me![AusgeschiedDatum]
            dDauer = dAus1 - Me![EintrittFW1]
        Else
            dAus1 = Me![AustrittFW1]
            dAus2 = Me![AusgeschiedDatum]
            dDauer = (dAus1 - Me![EintrittFW1]) + (dAus2 - Me![EintrittFW2])
        End If
    Else
        dDauer = (Nz(Me![AustrittFW2], Date) - Nz(Me![EintrittFW2], Date)) + _
               (Nz(Me![AustrittFW1], Date) - Nz(Me![EintrittFW1], Date))
    End If
    Get_Dauer = DatePart("yyyy", dDauer + 2) - 1900
End Function

Sobald ein Datum unter "verstorben" eingetragen wird wird dieses Datum auch bei "AusgeschiedDatum" eingetragen.

Zurückkommend auf die Abfrage, es gibt dann zwei Kombinationen von Datumswerte die eingetragen sein können und auch in Frage kommen. Wenn jemand ausgeschieden oder verstorben ist, gibt keine Ehrung mehr und muß somit auch nicht mehr angezeigt werden.
Das Feld "AustrittFW2" entfällt zukünftig, "AusgeschiedDatum" ist ausreichend.

Szenarien zu Datumseinträgen:
"EintrittFW1" - "AustrittFW1" - "EintrittFW2" - Datum()
"EintrittFW1" - Datum()

Habe dazu eine kleine Muster-DB erstellt, die meine Versuche auch zeigt. Die Codes habe ich auch in einem Word-Dokument wegen der bessern Übersicht dazu gegeben:
Habe es jeweils mit und ohne der Funktion "Mod" versucht und bisher auch noch nicht verschachtelt.
Jahre1:... (ohne "Mod") funktioniert
Jahre11:... (mit "Mod") funktioniert noch nicht, obwohl keine Fehlermeldung kommt. Hier scheitert es scheinbar wo und in welcher Anzahl die Klammern () gesetzt werden müssen.
Bei Jahre2:... und Jahre22:... ist es das selbe.
Und wo ich aktuell auch nicht weiter komme ist wie ich Jahre1:.. und Jahre2:... bzw. dann letztendlich Jahre11:... und Jahre22:... verschachteln kann.
Habe es mal mit Jahre1:... u. Jahre2:... versucht, es werden zwar Werte ausgegeben aber nicht die richtigen!

Ist jetzt viel Text, aber auch sehr komplex, zumindestens für mich.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 17, 2020, 17:07:35
Hallo Zusammen,

bin immer noch am arbeiten wie ich meine Abfrage hinbekomme.
Habe jetzt folgenden Ansatz der ausreichen würde:

Jahre1: Wenn(Nz([EintrittFW2];0)>0;Jahr(Jetzt())-Jahr([EintrittFW1]);Jahr([AustrittFW1])-Jahr([EintrittFW1])+Jahr(Jetzt())-Jahr([EintrittFW2]))

Allerdings wendet mein Code nur den "True-Teil"
ZitatJahr(Jetzt())-Jahr([EintrittFW1]);
an. Entsprechende Jahre werden angezeigt.
Nicht den "False-Teil"
ZitatJahr([AustrittFW1])-Jahr([EintrittFW1])+Jahr(Jetzt())-Jahr([EintrittFW2]))
Hier bleibt die Zelle einfach leer. Auch keine Fehlermeldung.

Wenn ich den Code testweise wie folgt vereinfache,
Jahre2: Wenn(Nz([EintrittFW2];0)>0;1111;2222)
dann funktionierts, das je nachdem ob "EintrittFW2">0 wird "1111" angezeigt bzw. "EintrittFW2"=0 "2222" angezeigt.

Warum funktioniert bei mir mein berechnender False-Teil nicht? Könnte mir jemand Hilfestellung geben.

Danke
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 17, 2020, 18:18:38
Hallo,

habe vermutlich meinen Fehler gefunden:
ZitatJahre1: Wenn(Nz([EintrittFW2];0)>0;.....
stattdessen:
ZitatJahre1: Wenn(Nz([EintrittFW2];1)>0;......

Nun wäre die Frage, wie kann ich die Mod-Funktion wieder in meinem Code anwenden?
In meiner alten Abfrage hat das mal so funktioniert:
Zitat25Jahre: Wenn((Jahr(Jetzt())-Jahr([EintrittFW1])) Mod 40>=25;Jahr(Jetzt())-Jahr([EintrittFW1]))

Aktuelle Code noch ohne Mod-Funktion:
25Jahre: Wenn(Nz([EintrittFW2];1)>0;Jahr(Jetzt())-Jahr([EintrittFW1]);Jahr([AustrittFW1])-Jahr([EintrittFW1])+Jahr(Jetzt())-Jahr([EintrittFW2]))

Habe leider keine Ahnung wie ich das anwenden soll.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 20, 2020, 14:59:02
Hallo,
ich würde auf das Mod Gedöns verzichten, sondern einfach nur die Jahre der Zugehörigkeit bestimmen.
Dann legst Du Dir eine Tabelle an die alle möglichen Ehrungen erfasst. In die Tabelel kannst Du noch ein Hakenfeld aufnehmen. Dann kannst Du anhaken welche Ehrungen Du sehen willst.

Jahre    Bezeichnung
25      25 jähriges
40      40 jähriges

Also in die Tabelle kommen alle Ehrungen die es gibt.
Diese Tabelle verwendest Du in einer Abfrage die die reinen Dienstjahre errechnet hat und stellst über die Jahre eine Verknüpfung her.
Die Abfrage zeigt dann automatisch nur die Namen an die eine Ehrung haben, mit der Bezeichnung der Ehrung.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 20, 2020, 19:17:56
Hallo Klaus,

erstmal Danke für deine Antwort. Eine Abfrage wer welche Ehrungen hat habe ich bereits.
Ich möchte eine Abfrage wer ab einer bestimmten Anzahl an Dienstjahren zur entsprechenden Ehrung ansteht. Dazu dient die Mod-Funktion. Aber vielleicht geht es auch anders?
Dazu habe ich nochmals, mit mehr DS, eine Muster-DB eingestellt.

Ich habe ein Abfrage "1NEU_Basis_AbfrageJahre25_40" mit je einer Spalte für 25Jahre (...[EhrungTitelID])=47...) und eine für 40Jahre (...[EhrungTitelID])=48...) und noch diverse berechnenden Spalten.

Die Funktion Mod "Mod 40>=25" soll auswerten wer >=25 Dienstjahre hat aber max.40.
dann soll die Spalte für 40 Jahre greifen:
Die Funktion Mod "Mod 45>=40" soll auswerten wer >=40 Dienstjahre hat aber max.45, dann scheider er sowieso aus.

Wenn jemand die Ehrung "[StatusRegID_E]=2" für 25 Jahre erhalten hat bzw. ausgeschieden ist soll er nicht mehr in der Spalte 25Jahre angezeigt werden, wenn nicht natürlich angezeigt. Das ...Mod 40>=25 soll garantieren das der Kollege solange er diese Ehrung noch nicht erhalten hat angezeigt wird. Diese Spalte funktioniert soweit.

Wenn jemand die Ehrung für 40 Jahre mit/ohne 25 Jahre bzw. ausgeschieden ist soll er nicht mehr in der Spalte 40Jahre angezeigt werden. Wenn er bereits die Ehrung für 25 Jahre erhalten hat, oder aus irgendwelchen Gründen auch nicht, und 40 Dienstjahre erreicht hat und noch nicht geehrt ist soll er nätürlich noch angezeigt werden.
Nun werden mir aber in der Spalte 40Jahre noch zwei Kollegen (Name66 u. Name88) angezeigt die die Ehrung für 40 Jahre bereits erhalten haben. Der Rest paßt.
Bei den beiden Kollegen werden auch zwei Zeilen angezeigt, wobei das Feld in der Spalte 25Jahre leer ist.

Ich kann leider nicht einschätzen wie groß mein Problem an der stelle ist. Ich hoffe nur ein kleines.
Würde mich freuen wenn ich nochmals unterstützung bekäme, und vielleicht nicht alles umbauen müßte.


Gruss
Manfred
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 20, 2020, 19:32:09
Hallo,
eine solche Tabelle wie ich vorgeschlagen habe gibt es nicht in Deinem Beispiel.
Kannst Du bitte hier mal alle Ehrungen hier zeigen die es gibt mit den Dienstjahren dazu.

Wenn ich das recht verstehe wurden 2 Feuerwehren zusammengelegt.
Für die Dienstjahre werden beide Feuerwehrzeiten zusammengerechnet, richtig ?
Erkläre mal genau wie sich die Dienstzeit berechnet.

Willst Du dann wissen, wer z.B. im nächsten Jahr zur Ehrung ansteht?
Oder für dieses Jahr ?

Lasse die Mod Geschichte (zunächst) einfach mal bei Seite.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 20, 2020, 21:07:35
Hallo Klaus,

die Dienstzeit berechnet sich wie folgt:
ZitatJahr([AustrittFW1])-Jahr([EintrittFW1])+Jahr(Jetzt())-Jahr([EintrittFW2])
Da es aber natürlich auch leere Felder gibt lasse ich diese in der Abfrage mit dem aktuellen Datum füllen!
Somit lautet die Berechnung in der Abfrage "Abfrage_Deinstjahre" wie folgt: DB im Anhang.
Jahre: Nz(Jahr([ErsAustrittFW1])-Jahr([EintrittFW1])+Jahr(Jetzt())-Jahr([ErsEintrittFW2]))

Die Tabelle für alle möglichen Ehrung gibt es in der DB, es handelt sich um die "tblEhrungTitel". Diese habe ich nun um ein Feld "Jahre" und "Sichtbar" erweitert. Die beiden Ehrungen um die es mir geht habe ich abgehackt.
In der Tabelle "tablEhrung2540" wird erfaßt um welche Ehrung "EhrungTitelID_E" es sich handelt incl. Datum und diverse Informationen.
Dann werden in der Tabelle "tablRegEhrung2540" die entsprechende Ehrung "EhrungID_E" registriert und welche Personen "PID_E" diese Ehrung an dem entsprechenden Tag/Jahr erhalten haben. Die Verknüpfungen unter den Tabellen siehe Bild "BEZIEHUNGEN.JPG".
Wie Du das mit der Beziehung über die "Jahre" meinst, verstehe aktuell leider nicht.

Wissen möchte ich wer in diesem Jahr für 25 bzw. 40 Jahre zum ehren ansteht. Wenn er aus welche Gründen (krankheit, etc.) in diesem Jahr nicht geehrt werden kann, soll er natürlich im nächsten Jahr bzw. in Folgejahren wieder angezeigt werden. Und das eben zu zum 40 Dienstjahr, solange er nicht geehrt wurde bzw. bis zum 45. Dienstjahr wenn er nicht für 40Jahre geehrt wurde.
Die Kollegen die bereits für 25 bzw. 40 Jahre geehrt wurden sollen nicht mehr sichbar sein.

Ich hoffe ich konnte es diesmal verständlich erklären.
Wenn man drin steckt, weis man irgendwie was man will aber es ist machmal schwierig zu erklären!

Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 20, 2020, 21:22:58
Hallo,
Was ist ErsEintrittFW2? Habe jetzt nicht alles mitgelesen.
Nz(Jahr([ErsAustrittFW1])-Jahr([EintrittFW1])+Jahr(Jetzt())-Jahr([ErsEintrittFW2]))
Die nz() Funktion ist hier überflüssig bzw. müsste eigentlich einen Fehler auslösen weil der 2. Parameter fehlt.
Außerdem ist die Funktion m.E. falsch. Beispiel im Jahr 2020 ausgeführt, wenn der Eintritt der 1.1.2010 ist, und der Austritt der 31.12.2019, dann liefert der Ausdruck 2019 - 2010 + 2020 - 2010 = 19 Jahre.
Ich würde einfach rechnen:
Jahr([ErsAustrittFW1])-Jahr([EintrittFW1])+1

2019-2019+1 = 1 Jahr.
2019-2010+1 = 10 Jahre.
Aber ich weiß ja nicht was ErsEintrittFW2 bedeutet...

Gruß Andreas


Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 20, 2020, 21:47:52
OK hab mir mal deine Abfrage angesehen.
ist eigentlich einfach.
Es gibt 2 Fälle: 1. Jemand tritt in Abteilung1 ein, egal ob er später wechselt oder nicht.
und 2. Jemand tritt sofort in Abteilung2 ein. Ob das möglich musst du festlegen.
Dann lautet das Abfragefeld für beide Möglichkeiten wie folgt:
Dienstjahre: Wenn(IstNull([EintrittFW1]) Und Nicht IstNull([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW1]))

Wenn IMMER zuerst in Abteilung1 eingetreten werden muss, dann ist es noch viel einfacher:
Dienstjahre: Jahr(Jetzt())-Jahr([EintrittFW1])

Ich denke mal sowas braucht man im Frühjahr für die Mitgliederversammlung, daher wird das aktuelle Jahr hier nicht mitgezählt. Falls doch, brauchst du wieder das +1.

Die Felder ErsAustrittFW1 und ErsAustrittFW2 sind jetzt überflüssig.
Ob jemand wechset von 1 nach 2 spielt doch eigentlich keine Rolle, da dabei doch keiner zeitlicher Abstand besteht - oder?

Gruß Andreas
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 20, 2020, 22:23:24
Hallo,

ZitatDienstjahre: Jahr(Jetzt())-Jahr([EintrittFW1])
das ist nur möglich wenn der Kollege von Anfang an dabei ist und nicht wechselt.

Aber gibt natürlich auch Kollegen, als Bespiel unser Kölner Kollege (Name37). Hat seine Dienstzeit in Köln begonnen, AustrittFW1-EintrittFW1, dann hatte er ein paar Jahre pausiert. Und ist seid 2011 (Datum()-EintrittFW2) bei uns nocht aktuell in der Feuerwehr.

Dieser Code:
ZitatDienstjahre: Wenn(IstNull([EintrittFW1]) Und Nicht IstNull([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW1]))
berücksichtigt an erstem Anschein nicht wenn ein Kollegen bereits ausgeschieden ist.
EintrittFW1 kann normalesweise niemals "Null" sein. Das ist nur der Fall, wenn der Kollege nur in der Verein eingetretten ist. Wenn unter EintrittFW1 kein Datum steht muss der Datensatz nicht berücksichtigt werden. Null kann nur AustrittFW2 und EintrittFW2 sein

Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 20, 2020, 23:08:38
Hallo,
was ist damit ?
ZitatWillst Du dann wissen, wer z.B. im nächsten Jahr zur Ehrung ansteht?
Oder für dieses Jahr ?
Bitte mal noch beantworten.

Im Anhang mein Vorschlag.
Öffne die Abfrage "WerHatWas".
Und sieh Dir die Abfrage im Entwurf an, da siehst wie ich das mit der Verknüpfung gemeint habe.
Das Nz in der Formel für das Jahr dürfte überflüssig sein, zumal Du keinen Ersatzwert übergibst. Nz macht aus der Zahl Text was hier auch nicht zu gebrauchen ist.
Die Formel selbst habe ich jetzt nicht geprüft, was ist z.B. mit Name2, der hat keine Jahre. Ist das richtig?
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 20, 2020, 23:58:37
Zitat von: mad am Januar 20, 2020, 22:23:24
berücksichtigt an erstem Anschein nicht wenn ein Kollegen bereits ausgeschieden ist.
Doch, ist doch nur das eine Feld.
Die Abfrage sieht so aus:
SELECT DISTINCT Personal.PID, Personal.NameP, IIf(IsNull([EintrittFW1]) And Not IsNull([EintrittFW2]),Year(Now())-Year([EintrittFW2]),Year(Now())-Year([EintrittFW1])) AS Dienstjahre, Personal.EintrittFW1, Personal.EintrittFW2, Personal.AustrittFW1
FROM Personal
WHERE (((Personal.AusgeschiedDatum) Is Null));


Wenn aber zwischen Austritt1 und Eintritt2 eine Pause von 1 oder mehreren Jahren liegen kann, dann ist das natürlich zu berücksichtigen.
SELECT DISTINCT Personal.PID, Personal.NameP, Personal.EintrittFW1, IIf(IsNull([AustrittFW1]),Now(),[AustrittFW1]) AS Austritt1, Year([Austritt1])-Year([EintrittFW1]) AS Jahre1, IIf(IsNull([EintrittFW2]),Now(),[EintrittFW2]) AS Eintritt2, IIf(IsNull([AustrittFW2]),Now(),[AustrittFW2]) AS Austritt2, Year([Austritt2])-Year([Eintritt2]) AS Jahre2, [Jahre1]+[Jahre2] AS Dienstjahre
FROM Personal
WHERE (((Personal.AusgeschiedDatum) Is Null));


Gruß Andreas
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 21, 2020, 00:08:24
@Andreas
Bei Deiner Abfrage kommen bei Name2 9 Dienstjahre raus, das sind doch aber nur 6 (2011 - 2017) ???
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 21, 2020, 00:26:24
Bist du sicher?
Egal, hab die Abfrage eben zusammengefasst wegen dem Modulo für die runden Dienstjahre. Da stimmts (wieder).
Wenn du z.B. alle Runden Dienstjahre ab 10 Jahre - also 10,15,20,25... ehren möchtest, dann würde das so aussehen:

SELECT DISTINCT Personal.PID, Personal.NameP, IIf(IsNull([AustrittFW1]),Year(Now()),Year([AustrittFW1]))-Year([EintrittFW1])+IIf(IsNull([AustrittFW2]),Year(Now()),Year([AustrittFW2]))-IIf(IsNull([EintrittFW2]),Year(Now()),Year([EintrittFW2])) AS Dienstjahre
FROM Personal
WHERE (((IIf(IsNull([AustrittFW1]),Year(Now()),Year([AustrittFW1]))-Year([EintrittFW1])+IIf(IsNull([AustrittFW2]),Year(Now()),Year([AustrittFW2]))-IIf(IsNull([EintrittFW2]),Year(Now()),Year([EintrittFW2])))>=10)
AND (((IIf(IsNull([AustrittFW1]),Year(Now()),Year([AustrittFW1]))-Year([EintrittFW1])+IIf(IsNull([AustrittFW2]),Year(Now()),Year([AustrittFW2]))-IIf(IsNull([EintrittFW2]),Year(Now()),Year([EintrittFW2]))) Mod 5)=0)
AND ((Personal.AusgeschiedDatum) Is Null));


Gruß Andreas
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 21, 2020, 00:30:10
Zitat von: MzKlMu am Januar 21, 2020, 00:08:24
@Andreas
Bei Deiner Abfrage kommen bei Name2 9 Dienstjahre raus, das sind doch aber nur 6 (2011 - 2017) ???
Eben nochmals getestet mit der geposteten Abfrage, da steht als Ergebnis 6 Dienstjahre in der Abfrage
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 21, 2020, 00:35:10
Hallo,
ich habe 9. Siehe Bild.

Aber diese Abfrage tut es auch:
SELECT NameP, EintrittFW1, AustrittFW1, EintrittFW2, AustrittFW2,
Year(Nz([AustrittFW1],Date()))-Year([EintrittFW1])+Nz(Year(Nz([AustrittFW2],Date()))-Year([EintrittFW2]),0) AS Jahre
FROM Personal

Habe ich oben in meiner Beispieldb noch eingebaut.

Ich verwende in meinem Vorschlag nix mit Modulo, mit der Verknüpfung über die Jahre braucht es das nicht.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 21, 2020, 00:40:27
Welches Bild?
Sieh mal mein Anhang, das ist die Abfrage aus #18 unterer Codeblock

Aber deine Lösung ist natürlich viel besser und übersichtlicher.
Gruß Andreas
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 21, 2020, 00:48:04
@Andreas
Sorry, ist schon spät, ich hatte da 9 gesehen, ist aber 6.

Und wie gesagt, meine Formel sieht etwas anders aus (siehe #22 und mein Beispiel in #17)
Modulo braucht es da auch nicht.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: Hondo am Januar 21, 2020, 00:54:46
Deine Abfrage berücktsichtigt die ausgeschiedenen noch nicht.
Die Frage die sich jetzt noch stellt ist wie genau hier abgegrenzt werden soll. Tagesgenau, Monatsgenau oder nur Jahreszahl genau? Ich trete am 10.12.1995 ein, dann hab ich am 12.01.2020 aber eigentlich erst 24 Dienstjahre voll, und keine 25.
Ehrung müsste eigentlich im Folgejahr kommen.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 21, 2020, 01:06:37
Hallo,
Die Ausgeschiedenen ist ja nur die Whereklausel, in der Beispiel DB ist das drin.
Zu der Sache mit der Abgrenzung müsste er sich noch äußern.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 21, 2020, 07:26:21
Hallo Zusammen,

ich bin begeistert von euch und möchte mich schon mal recht herzlich Danke sagen.
Ich kann mir das aber alles erst heute Abend ansehen da ich dienstl. Unterwegs bin.

Zur Abgrenzung: Es reicht die Abgrenzung auf Jahre, denn die Ehrung finden immer im November statt. Und wegen einem Monat machen wir da nicht rum, wir sind ja schließlich Freiwillige.

Und welche Kameraden möchte ich gerne sehen:
25Jahre Mod 40>=25
40Jahre Mod 45>=40
50Jahre Mod 55>=50

Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 21, 2020, 07:35:46
Noch ein kleiner Nachtrag, ich möchte die auswerten die zur Ehrung anstehen, nicht wer welche Ehrung hat.
Diese Abfrage gibt es bereits.

Und es sollte sich nur auf die Ehrungen aus der Tabelle "tblEhrungTitel":
"EhrungTitelID" = 47 (FW-Ehrenzeichen für 25 Jahre)
"EhrungTitelID" = 48 (FW-Ehrenzeichen für 40 Jahre)
"EhrungTitelID" = 49 (FW-Ehrenzeichen für 50 Jahre)
beziehen. Also auf die, die im aktuellen Jahre die Dienstzeit 25,40 od. 50 erreicht haben.

Idealerweise gibt es auch für jede Dienstzeit 25,40 od. 50 eine eigene Spalte in der Abfrage, ähnlich dem Bild im Anhang.
Und meine ursprungsabfrage wie unter #11
ZitatNun werden mir aber in der Spalte 40Jahre noch zwei Kollegen (Name66 u. Name86) angezeigt die die Ehrung für 40 Jahre bereits erhalten haben. Der Rest paßt.
Bei den beiden Kollegen werden auch zwei Zeilen angezeigt, wobei das Feld in der Spalte 25Jahre leer ist.

Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 21, 2020, 18:28:23
Hallo Klaus und Andreas,

ich habe mir nun mal eure Lösungsansätze angesehen.
@Klaus,
bei deinem Ansatz werden erstmal alle gezeigt "WerHatWas", das ist aber nicht das was ich auswerten möchte. Müsste ich diese Abfrage nochmals mit einer anderen kombinieren?
@Andreas,
bei Deinem Ansatz kommen leider nur bedingt die gewünschten Kameraden die ich auswerten möchte.

Ich habe mich auch mal weiter versucht. Jetzt wird zumindestens jeder Name nur einmal eingeblendet.
Ader es werden immer noch Kameraden angezeigt die eigentlich nicht angezeigt werden sollten.
Und Zwar Name66, Name86 und einen weiteren Kollegen habe ich noch ausgemacht, nämlich Name160.

Ich versuchte mit "EhrungTitelID" und "StatusRegID_E" die ausgezeichneten Kameraden auszugrenzen, klappt aber in der Spalte "40Jahre" noch nicht. Wie gesagt, handelt es sich um die drei Kollegen die eigentlich nicht angezeigt werden sollten.
Zur erklärung was es mit "[StatusRegID_E]=2" aufsich hat. 2 bedeutet das der Kamerad die Ehrung erhalten hat. 1 bedeutet das der Kamerad zu Ehrung angemeldet ist und 3 bedeutet das er vorgeschlagen ist. Also solange er den Staus 1 oder 3 hat soll er immer noch angezeigt werden.
Wie bekomme ich den Ausschluß hin, oder bin ich total auf dem Holzweg.

Hier mein aktueller Code zur Abfrage:
SELECT DISTINCT Personal.PID, Personal.Namekenn, Personal.NameP, IIf([EhrungTitelID]=47 And [StatusRegID_E]=2,Null,IIf(Nz(Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]),0) Mod 40>=25,Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]))) AS 25Jahre, IIf([EhrungTitelID]=47 And [StatusRegID_E]=2 And [EhrungTitelID]=48 And [StatusRegID_E]=2,Null,IIf(Nz(Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]),0) Mod 45>=40,Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]))) AS 40Jahre, IIf([EhrungTitelID]=47 And [StatusRegID_E]=2 And [EhrungTitelID]=48 And [StatusRegID_E]=2 And [EhrungTitelID]=49 And [StatusRegID_E]=2,Null,IIf(Nz(Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]),0) Mod 55>=50,Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]))) AS 50Jahre, Personal.EintrittFW1, IIf([AustrittFW1] Is Null,Date()) AS ErsAustrittFW1, IIf([EintrittFW2] Is Null,Date()) AS ErsEintrittFW2, Personal.AusgeschiedDatum, tblRegEhrung2540.StatusRegID_E
FROM tblEhrungTitel RIGHT JOIN (tblEhrung2540 RIGHT JOIN (Personal LEFT JOIN tblRegEhrung2540 ON Personal.PID = tblRegEhrung2540.PID_E) ON tblEhrung2540.EhrungID = tblRegEhrung2540.EhrungID_E) ON tblEhrungTitel.EhrungTitelID = tblEhrung2540.EhrungTitelID_E
WHERE (((Personal.AusgeschiedDatum) Is Null));


Habe aber zur besseren Darstellen auch meinen aktuellen Versuch der DB mit eingestellt.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 21, 2020, 19:46:05
Hallo,
irgenwie habe ich immer noch nicht so recht verstanden, was Du jetzt sehen willst.
Meine Abfrage "WerHatWas" zeigt doch nur die Leute die dieses Jahr zur Ehrung anstehen. Da Ihr erst im November ehrt, kann doch da niemand dabei sein, der die Ehrung schon bekommen hat.

Kannst Du mal erläutern, was genau Du an meiner Abfrage gern anders hättest.

Die Abfrage sollte eigentlich genau genommen heißen: "Wer_Kriegt_Dieses_Jahr_Was"
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 21, 2020, 20:47:42
Hallo Klaus,

ich bin nochmals ins Detail gegangen. In Deiner Abfrage werden nur diejenigen angezeigt die genau in diesem Jahr die entsprechende Ehrung für 25 bzw. 40 Jahre bekommen sollen. Es kommt aber vor das Ehrungen aus diversen Gründen genau in dem zu Ehrenden Jahr nicht zustande kommen.

Darum würde ich gerne bei den 25-jährigen alle angezeigt haben die die Ehrung noch nicht erhalten haben, sprich von 25 - 39 Dienstjahren.
Bei den 40-jährigen alle von 40-45 solange sie die Ehrung noch nicht erhalten haben und bei den 50-jährigen alle von 50-55 Jahren Dienstzeit.
Sobald der Kollege seine Ehrung erhalten hat, soll er nicht mehr angezeigt werden.

Und es geht mir auch nur um die drei Ehrungen:
ZitatUnd es sollte sich nur auf die Ehrungen aus der Tabelle "tblEhrungTitel":
"EhrungTitelID" = 47 (FW-Ehrenzeichen für 25 Jahre)
"EhrungTitelID" = 48 (FW-Ehrenzeichen für 40 Jahre)
"EhrungTitelID" = 49 (FW-Ehrenzeichen für 50 Jahre)
beziehen.

In meiner aktuellen DB soll das erhalten einer Ehrung zur entsprechenden Dienstzeit mit dem Code-Schnipsl, als Beispiel:
25Jahre: Wenn([EhrungTitelID]=47 Und [StatusRegID_E]=2;...
überprüft werden.

Wie geschrieben
ZitatZur erklärung was es mit "[StatusRegID_E]=2" aufsich hat. 2 bedeutet das der Kamerad die Ehrung erhalten hat. 1 bedeutet das der Kamerad zu Ehrung angemeldet ist und 3 bedeutet das er vorgeschlagen ist. Also solange er den Staus 1 oder 3 hat soll er immer noch angezeigt werden.

Ich hoffe das es nun etwas verständlicher ist.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 21, 2020, 20:57:52
Noch ein Hinweis,

bitte nicht "AustrittFW2" verwenden sondern "AusgeschiedDatum".
AustrittFW2 wird zukünftig nicht mehr verwendet.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 22, 2020, 00:38:59
Hallo,
ich meinen Vorschlag mal erweitert.
Die Tabelle mit den Ehrungstiteln habe ich für jedes Jahr um den entsprechenden Eintrag erweitert. Die Tabelle heißt jetzt "tblEhrungTitel2". Die wird dann verwendet.
Einfach mal die Abfrage "Wer_hat_noch_was_zu_kriegen" ansehen. Dieser Abfrage ist noch eine Abfrage vorgeschlatet die das Personal zeigt, das noch keine Ehrung hat.

Ich versuche immer möglichst alle Auswertungen über Verknüpfungen so zu regeln, dass es flexibel ist. Daher vermeide ich Ausdrücke mit Wenn und anderen komplizierten Formeln.

Wenn das so passt, müssten die Tabellen noch etwas geändert werden.

Schaue es Dir an, ich mache jetzt Schluss, es ist schon spät.
Morgen machen wir weiter.

Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 22, 2020, 11:20:53
Hallo Klaus,

habe mir Deinen Vorschlag mal angesehen, und habe festgestellt das jetzt in der Abfrage ,,Wer_hat_noch_was_zu_kriegen" nur diejenigen angezeigt werden die noch gar keine Ehrung hatten. Die Kollegen die 25Jahre bereits erhalten haben und jetzt für 40Jahre geehrt werden sollen (z.B. wie Ich, Name72) tauchen leider nicht auf.
Über diese vielen, eigentlich gleichen Ehrungsbezeichnungen in der neuen Tabelle ,,tblEhrungTitel2" wäre ich zwar nicht ganz so glücklich, aber wenn's denn am Ende funktioniert, warum nicht.
Habe mal drei Abfragen angelegt, wer denn bereits 25,40 bzw. 50Jahre Ehrung erhalten haben. 50 Jahre ist noch leer, da haben wir noch keinen.
Vielleicht könnte man ja diese Abfragen irgendwie verschachteln?
DB im Anhang.

Option:
Oder könnte man beim öffnen einen entsprechenden Parameter für die jeweilige Ehrung abfragen? Den ich event. per Liste-/Auswahlfeld beim öffnen eines Formulars Abfrage?


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 22, 2020, 11:23:02
Hallo,
ZitatÜber diese vielen, eigentlich gleichen Ehrungsbezeichnungen in der neuen Tabelle ,,tblEhrungTitel2" wäre ich zwar nicht ganz so glücklich, aber wenn's denn am Ende funktioniert, warum nicht.
Mir geht es erst mal um das Prinzip.
Ich schrieb ja bereits dass die Tabellen noch geändert werden müssen, in diese Tabelle würden die Ehrungsbezeichnungen als Fremdschlüssel eingefügt.

Ich komme erst am späten Nachmittag dazu mir die DB anzusehen und über Deine Vorgaben nachzudenken.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 22, 2020, 11:33:41
Ich denke letzte Antwort gehört zu einem anderen Thema
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 22, 2020, 11:37:24
Hallo,
ja, sorry, habs gelöscht.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 24, 2020, 14:25:24
Hallo Klaus,

auf Dein Zitat von #35,
ZitatIch schrieb ja bereits dass die Tabellen noch geändert werden müssen, in diese Tabelle würden die Ehrungsbezeichnungen als Fremdschlüssel eingefügt.
habe ich mich mal über eine Anpassung der Tabelle/n hergemacht.

Habe mal eine zusätzliche Tabelle "tblregEhrJahr" erstellt in dem die Lehrgangs-IDs "EhrungTitelID_EJ" mehrfach mit jeweiligen Jahren registriert werden. Siehe Tabelle und Beziehungen.
Später würde ich zur Erfassung ein HFO für die Lehrgänge (25Jahre, 40Jahre, ...) und ein UF für die Erfassung der Jahre (zb. 25,26,27,28,....,39) erstellen.
Abfragen habe ich weggelassen.

Wäre das der richtige weg von seitens der Tabellen?


Gruss
mad

Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 24, 2020, 16:51:06
Hallo,
bin immer noch am brüten.

Die Tabelle  "tblEhrung2540" halte ich für überflüssig. Was soll in dieser Tabelle dargestellt werden ?

Beim Status gibt es angemeldet und geplant, was ist der Unterschied, kann das nicht zu einem Feld werden, z.b. als Hakenfeld ?

Zitatdie Lehrgänge (25Jahre, 40Jahre, ...)
Wie kommen da jetzt Lehrgänge ins Spiel ?
Oder hast Du Dich verschrieben.

Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 24, 2020, 18:00:13
Hallo Klaus,

ja bei "Lehrgänge" habe ich mich verschrieben!

ZitatDie Tabelle  "tblEhrung2540" halte ich für überflüssig. Was soll in dieser Tabelle dargestellt werden ?
Bisher diente die Tabelle "tblEhrungen2540" als Datenquelle für ein HF zur Auswahl der Ehrung, wann diese vergeben werden soll, Ort, usw.
Die Tabelle "tblRegEhrung" erfaßte den/die zu Ehrenden im UF.
Aber wenn das anders gelöst werden kann, ich bin für Alles offen.

ZitatBeim Status gibt es angemeldet und geplant, was ist der Unterschied, kann das nicht zu einem Feld werden, z.b. als Hakenfeld ?
Den Status "geplant" bekommen erstmal alle die die entsprechende Ehrung bekommen könnten. Den Status "angemeldet" nur diejenigen die letztendlich, bei diesen Ehrungen, die bei der Regierung von Oberbayern wirklich zur Ehrung angemeldet werden. Und dann eben "geehrt".
Aber ich könnte auch mit einem Hakenfeld leben.
Dann wäre halt "Falsch" - "noch nicht geehrt" und "Wahr" - "angemeldet bzw. geehrt". Dann müsste ich halt kurzfristig zum Anmeldeformular drucken auf "Wahr" stellen und bis die Ehrung tatsächlich stattgefunden hat wieder zurück auf "Falsch".


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 24, 2020, 19:15:04
Hallo,
das eine Hakenfeld braucht es nur für "geplant" und "angemeldet". Eine erhaltene Ehrung wird dann mit einem Datum festgehalten. Aber das habe ich noch nicht ganz zu Ende gedacht.

Ich werde Dir das mal etwas umbauen und auf die Tabelle  "tblEhrungen2540" verzichten. Ich bin sicher, dass das geht.
Es wird aber etwas dauern.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 25, 2020, 12:22:32
Hallo,
anbei mal eine neue Version.
Bitte mal prüfen. Der Status ist da jetzt mal nicht berücksichtigt. Prüfe das mal, ob das jetzt erst mal so richtig ist.

Ich finde, darauf sollten wir mal aufbauen. Bitte mal keine weiteren Versuche machen, einfach erst mal berichten.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 25, 2020, 13:03:36
Hallo,

habe erstmal die Vereinsehrungen ausgeblendet, denn diese haben ein anders Feld als Eintrittsdatum und somit errechnen sich die Vereinszugehörigkeit anders. Aber bitte drin lassen, dazu kann ich ja später eine andere Abfrage erstellen.

Wenn man wie von Dir geschrieben den Status erstmal weg läßt, sind alle aufgelistet die eine 25 od. 40 Jahre-Ehrung erhalten haben bzw. diese noch aussteht.
Paßt aus meiner Sicht.

Als kleine Hilfe wie das Ergebnis aussehen sollte, wer die 25 bzw. 40-Jahre Ehrung noch nicht erhalten hat, habe ich eine Excel-Tab im Anhang. Prüfe ich aber natürlich auch selbst.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 25, 2020, 23:44:58
Hallo,
im Anhang eine neue Version.
Es gibt eine Abfrage "Titel25_40" die nur die Ehrungen zeigt die bei Sichtbar einen Haken haben.
Diese Abfrage wird dann Basis für die Abfrage "Wer_hat_noch_was_zu_kriegen".
Diese wiederum wird Basis für eine Kreuztabellenabfrage "Wer_hat_noch_was_zu_kriegen_Kreuztabelle", die dann das gewünschte Ergebnis zeigt. Hoffe ich jedenfalls.
Mir fehlt jetzt die Geduld das genau zu prüfen, das überlasse ich Dir.
Du musst ja schließlich auch etwas tun.  ;D

Der große Vorteil dieses Aufbaus liegt nach meiner Auffassung darin dass dieser völlig ohne komplizierte Vergleichsformeln auskommt. Das ist auch vollständig flexibel Hier können dann auch Ehrungen für 33 Jahre oder 27 (nur mal als Beispiel) eingebaut werden, es müssen dann nur Tabellen erweitert werden. Es sind keine Formeln/Ausdrücke anzupassen.

Schaue es Dir an.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 26, 2020, 11:00:30
Hallo,

leider zeigt es noch nicht das richtige Ergebnis. Es sollten insgesamt 28 Kollegen (in der alten Tabelle fehlten noch zwei Kollegen) sein die entweder die 25 (47) oder 40 (48)-Jahre-Ehrung bekommen sollten. (sh. Excel).
Dann habe ich noch nicht verstanden wie die Kollegen die die 25-Jahre oder 40Jahre bereits erhalten haben rausgefiltert werden sollen. Denn die "tblRegEhrung" kommt noch in keiner Abfrage vor.

In Deinem Vorschlag kommt die "tblEhrung" nicht mehr zum Einsatz, stattdessen sind diverse Felder davon in die "tblRegEhrung" gewandert.
Dann könnte ich aber mein HF ("tblEhrung") in dem ich die Ehrungen erfaße mit dem UF ("tblRegEhrung") in dem zur jeweiligen Ehrung die jeweiligen Kameraden (1:n-Beziehung) erfasse, nicht mehr verwenden, oder?
Ein neues Formular zu erstellen ist grundsätzlich kein Problem allerdings müsste für den jeden Kameraden zusätzlich die entsprechende Ehrung (47,48), Datum, Einreicher, Erledigt_E auswählen --> das ist eigentlich nicht mein Ziel.

Könnte man meinen Tabellenentwurf (Feuerwehr_07, sh. Anhang und Beziehungen) auch verwenden?

Nochmals als Info welche Kriterien erfüllt werden müssen: in Klammer (x) "EhrungTitelID" oder "StatusRegID_E"
25Jahre:
25 Dienstjahre erreicht (Jahrgenau)), nicht ausgeschieden, noch nicht für 25Jahre (47) geehrt - kann aber bereits "statusRegID_E" gleich "angemeldet" oder "geplant" sein und somit schon in der "tblRegEhrung" nur erfaßt.

40Jahre:
40 Dienstjahre erreicht (Jahrgenau), 25Jahre (47) bereits geehrt; nicht ausgeschieden, nocht nicht für 40Jahre (48) geehrt - kann aber bereits "statusRegID_E" gleich "angemeldet"(1) oder "geplant"(3) sein und somit schon in der "tblRegEhrung" nur erfaßt.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: MzKlMu am Januar 27, 2020, 23:33:24
Hallo,

Du hast eine PN.
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am Januar 29, 2020, 13:44:02
Hallo,
wie angeregt habe ich mal eine abgespeckte DB erstellt.
Habe aus der Tabelle "Personal" alle DS gelöscht und 9 Fallbespiele erstellt.
Die Fallbespiele sind im Feld "Bemerkung" umschrieben und im Feld "in Abfrage für 2020 sichtbar" mit ja oder nein markiert, je nach dem ob sie in der Abfrage entsprechend erscheinen sollen.
Diverse Ehrungen ob geehrt oder geplant/angemeldet sind wie bisher in der Tabelle "tblRegEhrung" erfaßt.

Das ganze ist auch als Info nochmals in einer Excel im Anhang dargestellt.

Zusätzlich habe ich zur besseren Übersicht auch das Formular "frm_Ehrung" zur Erfassung der Ehrungen in die DB eingefügt. Diese Formular dient NICHT aus Auswertung/Ansicht wer den im aktuellen Jahr bzw. zukünftig geehrt werden soll/muß.

Ich hoffe das hilft weiter.
Für weitere benötigte Infos einfach melden.


Gruss
mad
Titel: Re: Abfrage auf div. Ehrungen beschränken
Beitrag von: mad am März 12, 2020, 01:49:10
Da es keine Rückmeldung mehr dazu gibt, würde ich das Thema als unerledigt schließen.

mad