Geburtstagserinnerung in MessageBox

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Geburtstagserinnerung in MessageBox

    Hi

    ich habe ein kleines Adressbuch erstellt.

    im Dataset habe ich eine spalte Geburtstag
    In der Form habe ich eine GeburtstagsTexBox die mir per BindingSource den geburtstag einträgt. Anzeige in Datagriedview.

    Jetzt möchte ich mir in einer MessageBox bei Form Load erstellen die mir 3 Tage bevor bzw 3 Tage danach eine Erinnerung angezeigt wird wer demnächst Geburtstag hat oder hatte.

    Wie muss ich da drann gehen um dies umzusetzten.

    Danke

    Gruß
    Manni
    Ermittle einfach die Geburtstage (SELECT ... WHERE Datum BETWEEN Von AND Bis)
    Dann baust du dir mit ner Schleife den Text deiner Box zusammen
    For each row in Abfrage

    Dann brauchst du die nur noch anzeigen
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @mox Was soll das bringen?
    Die Geburtstage sind doch bekannt und ein Datumsbereich von heute +/-3 Tage ist auch vorgegeben.
    Daher hat man keinen Nutzen wenn man die Tage bis zum Geburtstag ermittelt.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Hallo @Schamash

    Da ich im .Net noch anfäger bin, weis ich jetzt nicht was du mit deinem Hinweis meinst.
    Könntest du oder jemand anderes es mir erklären oder einen Beispiel Code zeigen?
    Wäre Dankbar

    Schamash schrieb:

    Ermittle einfach die Geburtstage (SELECT ... WHERE Datum BETWEEN Von AND Bis)
    Dann baust du dir mit ner Schleife den Text deiner Box zusammen
    For each row in Abfrage

    manni4545 schrieb:

    oder einen Beispiel Code zeigen?
    Das wäre schon möglich, aber könntest du auch was damit anfangen? Würde das auch nur ansatzweise in deine Anwendung hineinpassen?
    (Ich glaub kaum)
    Also du solltest den BeispielCode bringen, oder zumindest einen Screenshot von deinem Dataset-Designer.
    Dann weiß man, wovon konkret die Rede ist , und kann sinnvolle Vorschläge machen.
    probierma

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. 'GenerateTestData()
    3. Dim in3Tagen = Date.Today.AddDays(3)
    4. For Each rwKontakt In theDataset.Kontakt
    5. Dim nextBirthDay = GetNextBirthDay(rwKontakt.Geburtstag)
    6. If nextBirthDay < in3Tagen Then MessageBox.Show("Der wird alt: " & rwKontakt.NachName)
    7. Next
    8. End Sub
    9. Private Function GetNextBirthDay(birth As Date) As Date 'wenn der diesjährige Geburtstag vorbei ist, den nächstes Jahr returnen
    10. Dim today = Date.Today
    11. Dim birthDayThisYear = birth.AddYears(today.Year - birth.Year)
    12. Return If(birthDayThisYear > today, birthDayThisYear, birthDayThisYear.AddYears(1))
    13. End Function
    Funzt das? - ich kanns ja ohne dein Dataset nicht richtig testen

    C#-Quellcode

    1. DateTime datum1 = DateTime.Today.AddDays(-3);
    2. DateTime datum2 = DateTime.Today.AddDays(3);
    3. foreach (DataRow allerows in dataSet1.geburtstage.Select(Columnname >= #" + datum1 + "# AND date <= #" + datum2 + "#"))
    4. {
    5. MessageBox.Show(allerows.Field<string>(1) + " hat oder hatte geburtstag");
    6. }


    Ungetestet!
    Hier könnte meine Signatur stehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mox“ ()

    Hi @ErfinderDesRades
    Erstmal Danke grundsätzlich funktioniert es.

    ErfinderDesRades schrieb:

    If nextBirthDay < in3Tagen Then MessageBox.Show("Der wird alt: " & rwKontakt.NachName)


    < das zeichen heißt doch kleiner wenn ich Datum heute 23.04.17 Geburtstag gestern 22.04.17 wird mir keine Messagebox angezeig.
    " " " " wenn ich Geburtstag morgen 24.04.17 mache wird mir die MessageBox mit der Meldung angezeig

    > mache ich das größer zeichen wird mir die Messagebox vor dem eigentlichen Geburtstag angezeigt so wie es sein sollte.

    Oder mache ich da jetzt einen Denkfehler mit dem größer oder kleiner zeichen?
    Ich habe leider kaum Zeit um mir den Code genauer anzuschauen, aber hast du folgendes beachtet?:

    Wenn du dem Programm sagst, dass alles unter 10 mit inbegriffen sein soll, du die 10 aber ebenfalls inbegriffen haben willst, dann willst du nicht alles unter der 10 inbegriffen haben, sondern unter der 11. (Ich hoffe, dies entspricht deinen Fehler)

    "Throw New Global.System.Data.StrongTypingException("Der Wert für Spalte Geburtstag in Tabelle Kontakt ist DBNull.", e)"
    Ja, das liegt daran, dass die Spalte keinen Eintrag hat, vermute ich. Hier würde ich wohl in die For Each Schleife folgendes packen:

    VB.NET-Quellcode

    1. ​For Each rwKontakt In theDataset.Kontakt
    2. Dim nextBirthDay = GetNextBirthDay(rwKontakt.Geburtstag)
    3. If Not nextBirthDay = vbNull Then
    4. If nextBirthDay < in3Tagen Then MessageBox.Show("Der wird alt: " & rwKontakt.NachName)
    5. End If
    6. Next


    Oder

    VB.NET-Quellcode

    1. ​For Each rwKontakt In theDataset.Kontakt
    2. Dim nextBirthDay = GetNextBirthDay(rwKontakt.Geburtstag)
    3. If not nextBirthDay = String.Empfy Then
    4. If nextBirthDay < in3Tagen Then MessageBox.Show("Der wird alt: " & rwKontakt.NachName)
    5. End If
    6. Next


    Ich hoffe, es klappt! Wurde nicht getestet!
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    manni4545 schrieb:

    liegt wohl daran, dass nicht überall ein Geburtsdatum drinne ist.
    ja sicher. Wenn du die Spalte so eingerichtet hast, dass sie auch leer bleiben kann, gibts diese Exception, denn von einer leeren Spalte kann kein Wert abgerufen werden.
    Das kannste abfangen, indem du immer die rwKontakt.IsGeburtstagNull()-Methode testest, bevor du den Wert tatsächlich abrufst.



    Das <-Zeichen muss so bleiben. Mir wär lieber, du würdest den Code verstehen. Er gibt alle Datensätze aus, deren nächster Geburtstag zwischen heute und in3Tagen liegt.
    Willst du das Zeitfenster verlängern, so kannst du zB in3Tage auf in4Tage umändern - das solltest du schon selbst gebacken kriegen, anhand meiner Vorlage.
    Willst du das Zeitfenster rückverlagern, ist vmtl das einfachste, das an GetNexBirthDay() übergebene Datum rückzuverlagern.
    Dazu verwendest due dieselbe Date.AddDays()-Methode, nur übergibst du ihr negative Werte.

    Wie gesagt, mein Code ist nur eine Vorlage, die das nötige Instrumentarium dir vorstellt, sodass du mit Leichtigkeit programmieren lernen kannst.
    Ich will nicht dein Programm programmieren - deshalb liefere ich dir keinen weiteren Code, sondern es ist nun an dir, den zu verstehen, evtl. auch eigenen Code zu liefern, und Fragen dazu zu stellen - falls er nicht ganz tut, was er soll.