Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Geburtstagsvorschau
Gehe zu Seite Zurück  1, 2
zurück: Startformular mit automatisierten Loading weiter: Datensätze zählen (Unterformular) Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Marmeladenglas
komme zurecht


Verfasst am:
08. Nov 2008, 18:29
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hi,
schau dir die SQL-Sicht der Abfrage an, vielleicht wird es dann klarer. In der Abfrage steckt ein Sub-Select. Im Sub-Select werden zunächst mal die Geburtstagskinder des vorgegebenen Zeitraums gefiltert, über ein IIF wird dann festgestellt, ob der Geburtstag noch im aktuellen Jahr stattfindet oder erst im nächsten. Diese Vorgehensweise resultiert aus meiner Interpretation (tatsächlich ist es wohl anders) deines Ausgangsbeitrags:
Code:
DatSeriell(Jahr(Datum()-7);Monat([GebDatum]);Tag([GebDatum]))
und die nächten 60 Tage
Code:
DatSeriell(Jahr(Datum()+60);Monat([GebDatum]);Tag([GebDatum]))
Ich hatte diese beiden Zeilen als Felddefinitionen in deiner Abfrage aufgefasst.
AktuellMinus7 entspricht bei mir deiner oberen Zeile
AktuellPlus60 der unteren Zeile!
ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
09. Nov 2008, 15:31
Rufname:


AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

entschuldige bitte, wenn ich mich jetzt erst wieder melde, aber ich war gestern ab spätem Nachmittag bis in den frühen Morgen außer Haus. Der Chor meines Vereines hatte Gestern bei einem Galakonzert in Frankreich mitgewirkt.
In meiner Datenbank befinden sich zur Zeit über 750 DS. Dies sind Aktive (tblStatus.StatusID_P)=1, Passive (tblStatus.StatusID_P)=2 und ehemalige Mitglieder (tblMitgliedStatus.StatusBis). Steht in letzterem Feld ein Austrittsdatum, so wandert der DS automatisch zu den ehemaligen Mitgliedern. Mit dem folgenden SQL-Code selektiere ich die relevanten DS für die Geburtstagsvorschau.
Code:
SELECT S.StatusID_P, MS.StatusBis, M.NachName, M.Vorname, M.GebDatum,
       Year(Date())-Year([GebDatum]) AS [Alter]
FROM   tblStatus
       INNER JOIN (tblMitglieder AS M
                   INNER JOIN tblMitgliedStatus AS MS
                   ON M.MitgliedID_P = MS.MitgliedID_F)
       ON S.StatusID_P = MS.StausID_F
WHERE  (S.StatusID_P=1
OR      S.StatusID_P=2)
AND    MS.StatusBis Is Null
AND    M.GebDatum Is Not Null;
Nun gilt es meinen SQL-Code mit Deinem zu verquicken. Für einen Programmieranfänger, zu denen ich mich noch zähle, ist dies keine Leichtigkeit und bin deshalb auf Deine Hilfe angewiesen. Habe bereits mehrere gescheiterte Versuche hinter mir.

MfG ernades
Marmeladenglas
komme zurecht


Verfasst am:
10. Nov 2008, 09:34
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Probier es mal so:
Code:
SELECT   IIf([AktuellMinus7] Between Date()-7 And Date()+60,[AktuellMinus7],[AktuellPlus60]) AS Naechster,
         Q.Vorname, Q.NachName, Q.GebDatum, Year(Date())-Year([GebDatum]) AS [Alter]
FROM     (SELECT S.StatusID_P, M.NachName, M.Vorname, M.GebDatum,
                 DateSerial(Year(Date()-7),Month([GebDatum]),Day([GebDatum])) AS AktuellMinus7,
                 DateSerial(Year(Date()+60),Month([GebDatum]),Day([GebDatum])) AS AktuellPlus60
          FROM   tblStatus AS S
                 INNER JOIN (tblMitglieder AS M
                             INNER JOIN tblMitgliedStatus AS MS
                             ON M.MitgliedID_P=MS.MitgliedID_F)
                 ON S.StatusID_P=MS.StatusID_F
          WHERE  (S.StatusID_P=1
          OR      S.StatusID_P=2)
          AND    MS.StatusBis Is Null
          AND    M.GebDatum Is Not Null
          AND    (DateSerial(Year(Date()-7),Month([GebDatum]),Day([GebDatum])) Between Date()-7
                                                                                   And Date()+60
          OR      DateSerial(Year(Date()+60),Month([GebDatum]),Day([GebDatum])) Between Date()-7
                                                                                    And Date()+60))  AS Q
ORDER BY IIf([AktuellMinus7] Between Date()-7 And Date()+60,[AktuellMinus7],[AktuellPlus60]);
Dein Feld StatusBis hab ich aus dem SElect rausgeschmissen, da der sowieso auf NULL geprüft wird, also in der Anzeige eh keinen Wert zeigt.
Fraglich ist ob man mit der StatusID_P nicht genauso verfahren sollte, geh mal davon aus, das ist ein für die Anzeige "uninteressanter" Autowert-Index ?!
In deinem Ursprungs-SQL-Code ist entweder ein Schreibfehler oder das Feld ist in der Tabelle mit fehlerhaftem Namen:

tblMitgliedStatus.StausID_F

das Staus sollte wohl ein Status sein. In der angebotenen Lösung habe ich das auf Status korrigiert, in deiner ORiginal-DB mußt du das noch bereinigen, oder in meiner Lösung die "falsche" Schreibweise verwenden.
Edit:
hier mal noch als DB-Anhang Wink



GebNeu1.zip
 Beschreibung:

Download
 Dateiname:  GebNeu1.zip
 Dateigröße:  96.4 KB
 Heruntergeladen:  13 mal

ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Nov 2008, 02:03
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

es ist in der Tat ein Schreibfehler in meiner Datenbank (tblMitgliedStatus.StausID_F), nur hatte ich bisher noch nicht die Zeit und auch nicht den Mut gefunden diesen Schreibfehler in der komplexen Datenbank zu korregieren. Werde mich aber wohl irgendwann dazu durchringen müssen. Mit "Mut" meine ich, wenn ich diesen Fehler verbessere, werden sich automatisch andere einstellen und diese dann zu finden wird nicht immer leicht sein. So auch jetzt mit dem Code, den Du nach meinen Vorgaben dankenswerter Weise für mich zusammengestellt hast.
Ich habe die Abfrage mit dem Schreibfehler eingesetzt und erhalte nun folgende Fehlermeldung: "Datentyp in Kriterienausdruck unverträglich". Diese Meldung sagt mir im Moment garnichts. Da weis ich nicht wo ich mit meiner Fehlersuche anfangen soll. Was ist mit "Datentyp" gemeint? Etwa Textfeld, Zahlenfeld oder Datum und was ist mit Kriterienausdruck gemeint? Wenn ich diese Fehlermeldung definieren kann, werde ich auch den Fehler finden. Was sagt Dir diese Fehlermeldung?

MfG ernades
Marmeladenglas
komme zurecht


Verfasst am:
11. Nov 2008, 09:42
Rufname:


AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

hi,
in welcher Datenbank erhälst du diese Fehlermeldung ?
In meinem Upload oder in deiner Ursprungsdatenbank ?
Diese Fehlermeldung wird ausgegeben, wenn du z.b. versuchst Text mit Zahl in Beziehung zu setzen. Oder einem Feld Text zuweist, wenn dort eine Zahl erwartet wird. Wenn ich z.b. diesen Teil des Codes falsch verändere:
Zitat:
...WHERE ((Not (M.GebDatum) Is Null) AND ((MS.StatusID_F)="1"....

Ich übergebe hier die 1 als String (durch die Gänsefüßchen) und nicht mehr als Zahl, kann ich diese Fehlermeldung reproduzieren !
Wird eine bestimmte Stelle markiert ? Wann kommt diese Fehlermeldung ?

Was mir noch aufgefallen ist. Ausgehend von deinem Ursprungs-SQL ist eigentlich der 2te Inner-Join überflüssig (ON S.StatusID_P=MS.StatusID_F).
Der StatusID_P wird sowieso als Fremdschlüssel abgebildet und ist identisch mit dem StatusID_F, also kann man gleich auf den StatusID_F zurückgreifen.

Code:
SELECT DISTINCTROW IIf([Minus7] Between Date()-7 And Date()+60,[Minus7],[Plus60]) AS Naechster, Q.Vorname, Q.NachName, Q.GebDatum, Year(Date())-Year([GebDatum]) AS [Alter]
FROM
(SELECT M.Vorname, M.Nachname, M.GebDatum,   DateSerial(Year(Date()-7),Month([GebDatum]),Day([GebDatum])) AS Minus7, DateSerial(Year(Date()+60),Month([GebDatum]),Day([GebDatum])) AS Plus60
FROM tblMitglieder AS M INNER JOIN tblMitgliedStatus AS MS ON M.MitgliedID_P = MS.MItgliedID_F
WHERE ((Not (M.GebDatum) Is Null) AND ((MS.StausID_F)=1 Or (MS.StausID_F)=2) AND ((MS.StatusBis) Is Null)) AND ((DateSerial(Year(Date()-7),Month([GebDatum]),Day([GebDatum]))) Between Date()-7 And Date()+60) OR (((DateSerial(Year(Date()+60),Month([GebDatum]),Day([GebDatum]))) Between Date()-7 And Date()+60))) AS Q
ORDER BY IIf([Minus7] Between Date()-7 And Date()+60,[Minus7],[Plus60]);

Der Code ist mit dem Stausfehler Smile
ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Nov 2008, 10:35
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

die besagte Fehlermeldung erhalte ich in meiner Ursprungsdatenbank, nachdem ich Deinen SQL-Code eingesetzt habe. Das Formular lässt sicht dann nicht öffen, es erscheint dann die genannte Fehlermeldung.
Ändere ich nun den Code nach der neuesten Version ab, dann erhalte ich beim Öffnen des Formulares die Fehlermeldung: "Syntaxfehler in JION-Operation".
Übrigens, im Forum steht eine Vorversion meiner Datenbank mit dieser Geburtstagsvorschau unter dem folgenden Link: http://www.office-loesung.de/ftopic237960_0_0_asc.php Hier kannst Du Dir ein Bild von meiner Datenbank machen.

MfG ernades
Marmeladenglas
komme zurecht


Verfasst am:
11. Nov 2008, 11:17
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

hi,
na den Tipp hättest du mir gleich geben können, dass deine DB schon upgeloaded ist, dann hätt ich direkt gleich auf der Original-DB aufbauen können.
Schau mal ob das rund läuft !



MGVNeu.zip
 Beschreibung:

Download
 Dateiname:  MGVNeu.zip
 Dateigröße:  376.53 KB
 Heruntergeladen:  12 mal

ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Nov 2008, 12:05
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

super! super! Das sieht ja klasse aus. Vielen, vielen Dank für Deine Hilfe. Entschuldige bitte, dass ich Dir den Tip mit der Datenbank im Forum nicht gleich mitgeteilt habe. Ich musste erst nachsehen, ob in dieser Version die Geburtstagsvorschau schon eingebaut war.
Bei genauerem Hinsehen fällt mir jetzt allerdings auf, dass die Altersberechnung für das laufende Jahr stimmt aber für das neue Jahr nicht. Die Altersberechnung bezieht sich in der Formel auf das aktuelle Datumsjahr. Wie kann man das korregieren?

MfG ernades
Marmeladenglas
komme zurecht


Verfasst am:
11. Nov 2008, 12:24
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hi,
ja da hab ich auch schon kurz drüber nachgedacht, ob in deinem Altersfeld, das aktuelle Alter stehen soll, oder "wie alt der Kandidat" wird !
Dein DataMismatch liegt übrigens an den teilweisen leeren Geburtstagsfeldern.

Man könnte das genauso machen wie für das "Naechster Feld".
Code:
IIf([AktuellMinus7] Between Date()-7 And Date()+60,Year(Date())-Year([GebDatum]),Year(Date())-Year([GebDatum])+1) AS [Alter]
ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Nov 2008, 13:00
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

das funktioniert leider nicht. Fehlermeldung: "Der Ausdruck ist syntaktisch falsch". Markiert ist das erste "Year" in der Formel. In der Fehlermeldung steht noch:"Sie haben möglicherweise einen Operanden aber keinen Operator eingegeben".
Sagt Dir das etwas?

MfG ernades
Marmeladenglas
komme zurecht


Verfasst am:
11. Nov 2008, 14:48
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

hi,
ich schau mir das heute abend an, bzw. poste mal bitte den kompletten SQL-String, der deiner Abfrage mittlerweile zugrunde liegt.
ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Nov 2008, 15:06
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

der SQL-String meiner Abfrage für die Geburtstagsvorschau sieht folgendermaßen aus:
Code:
SELECT   DISTINCTROW
         IIf([Minus7] Between Date()-7 And Date()+60,[Minus7],[Plus60]) AS Naechster,
         Q.Vorname, Q.NachName, Q.GebDatum, Year(Date())-Year([GebDatum]) AS [Alter]
FROM     [SELECT M.Vorname, M.NachName, M.GebDatum,
                 DateSerial(Year(Date()-7), Month([GebDatum]),Day([GebDatum])) AS Minus7,
                 DateSerial(Year(Date()+60),Month([GebDatum]),Day([GebDatum])) AS Plus60
          FROM   tblMitglieder AS M
                 INNER JOIN tblMitgliedStatus AS MS
                 ON M.MitgliedID_P=MS.MitgliedID_F
          WHERE  Not (M.GebDatum) Is Null
          AND    MS.StatusBis Is Null
          AND    (MS.StausID_F=1
          OR      MS.StausID_F=2)]. AS Q
WHERE    Q.Minus7 Between Date()-7 And Date()+60
OR       Q.Plus60 Between Date()-7 And Date()+60
ORDER BY IIf([Minus7] Between Date()-7 And Date()+60,[Minus7],[Plus60]);
Der funktioniert auch wunderbar bis auf die Altersberechnung im nächsten Jahr.
Die aktuelle Version meiner Datenbank habe ich abgespeckt, die DS reduziert und angehängt.

MfG ernades



MGV_Vereinsverwaltung_20081111.zip
 Beschreibung:
von 1.06 MB auf 484.53 KB und anonymisiert by Willi Wipp

Download
 Dateiname:  MGV_Vereinsverwaltung_20081111.zip
 Dateigröße:  484.53 KB
 Heruntergeladen:  20 mal

Marmeladenglas
komme zurecht


Verfasst am:
12. Nov 2008, 10:00
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

hi,
ok, ich schaus mal durch:
- ehm, die Daten sollten anonymisiert sein ! Das sieht in deinem Upload nicht so aus Wink

Desweiteren komprimiere deine DB, zumindest ab und zu oder beim Schließen.
Deine upgeloadete DB schrumpft dadurch von 5 MB auf 3 MB,
gezippt sind das dann ca. 500 kb anstelle der upgeloadeden ca. 1 MB

Was ich gerade gesehen hab:
Deine Conditional Formatting bzgl. der runden Geburtstage ab 50 kannst du abkürzen mit :

Ausdruck ist:
Code:
[Alter]>49 And [Alter] Mod 5=0
Probiers mal so:
Code:
SELECT   DISTINCTROW
         IIf([Minus7] Between Date()-7 And Date()+60,[Minus7],[Plus60]) AS Naechster,
         Q.Vorname, Q.NachName, Q.GebDatum,
         IIf(Year([Naechster])<>Year(Date()),
             Year(Date())-Year([GebDatum])+1,
             Year(Date())-Year([GebDatum])) AS [Alter], Q.Minus7, Q.Plus60
FROM     (SELECT M.Vorname, M.NachName, M.GebDatum,
                 DateSerial(Year(Date()-7),Month([GebDatum]),Day([GebDatum])) AS Minus7,
                 DateSerial(Year(Date()+60),Month([GebDatum]),Day([GebDatum])) AS Plus60
          FROM   tblMitglieder AS M
                 INNER JOIN tblMitgliedStatus AS MS
                 ON M.MitgliedID_P=MS.MitgliedID_F
          WHERE  Not (M.GebDatum) Is Null
          AND    MS.StatusBis Is Null
          AND    (MS.StausID_F=1
          OR      MS.StausID_F=2))  AS Q
WHERE    Q.Minus7 Between Date()-7 And Date()+60
OR       Q.Plus60 Between Date()-7 And Date()+60
ORDER BY IIf([Minus7] Between Date()-7 And Date()+60,[Minus7],[Plus60]);
ernades
Im Profil kannst Du frei den Rang ändern


Verfasst am:
12. Nov 2008, 19:10
Rufname:

AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

Hallo Marmeladenglas,

vielen Dank für den SQL-String. Habe ihn auch bereits ausprobiert und er funktioniert suuuuuper!!!
Bevor ich die Datenbank gezippt hatte, habe ich mindestens 3x die Datenbank komprimiert und hatte mich auch gewundert, dass obwohl ich über 700 DS aus der Datenbank entfernt hatte, die Datei einfach nicht so recht schrumpfen wollte. Die Conditional Formatting habe ich so übernommen. Super!!!
Nun kann ich meine Geburtstagsvorschau damit abschließen. Nochmals vielen Dank, oder wie man bei uns an der französischen Grenze sagt: Merci !!!

MfG ernades
Marmeladenglas
komme zurecht


Verfasst am:
12. Nov 2008, 20:32
Rufname:


AW: Geburtstagsvorschau - AW: Geburtstagsvorschau

Nach oben
       Version: Office 2003

De rien !
Ca me fait plaisir ... Laughing
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Gehe zu Seite Zurück  1, 2
Diese Seite Freunden empfehlen

Seite 2 von 2
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Word VBA