My.Settings Zurücksetzen und Daily Limit ohne sql Datenbank

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

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    My.Settings Zurücksetzen und Daily Limit ohne sql Datenbank

    Hi ,

    In meinem aktuellen project möchte ich zur nutzung ein Daily Limit einbauen.

    Aktuell habe ich einen Zähler in den Hauptbutton eingebaut dieser Zähler zählt wie oft der Button geklickt wird.
    Verwirklicht habe ich das ganz einfach mit disem Code.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Label10.Text = Val(Label10.Text) + 1


    Bitte keine Belehrung über die Benennung meiner Controlls ich weis es und habe auch schon einen Großteil umbenannt.

    Nun könnte man natürlich sagen speichere jeden klick in eine Sql Datenbank ab da ich aber die Serverbelastung meines Servers so gering wie möglich halten möchte habe ich mir gedacht man könnte doch die klicks in My.Settings speichern.

    Frage: Ist das empfehlenswert , wie sicher ist das bei otto Normalverbraucher.

    Mal angenommen ich speichere den wert wirklich in den Settings so muss ich diesen wert auch täglich zurücksetzen.

    Ich habe auf schnelle-online.info/Homepage/Uhr-fuer-die-Homepage.html

    Ein html Script für datum und uhrzeit gefunden womit man eine zeit abfrage machen könnte da die pc Uhrzeit ja jederzeit geändert werden kann jetzt.

    Frage: Wie kann ich diese uhrzeit und das datum jetzt auf einfachstem wege abfragen.

    Ein normaler Downloadstring scheint mir hier ja nicht möglich da die uhrzeit eine id ist

    Zu guter letzt möchte ich jedem User der eine Lizenz hat Lizenzsystem ist teilweise schon verbaut eine Gültigkeit der Lizenz mit eintragen diese kann auf meinem Server ausgelesen werden also im Format (TT.MM.JJ)

    und diese müsste ich dann abgleichen mit der Uhrzeit aus dem html Scrip ist das datum überschritten ist die Lizenz nicht mehr gültig..



    Wie pake ich das ganze am besten an und oder gibt es bessere Lösungsmöglichkeiten ohne das anlegen einer sql Datenbank?

    Über eure Antwort freue ich mich danke.

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

    bigbase schrieb:

    VB.NET-Quellcode

    1. Label10.Text = Val(Label10.Text) + 1
    Ich nenne das verwirkt, nicht aber verwirklicht. ;(

    bigbase schrieb:

    Mal angenommen ich speichere den wert wirklich in den Settings so muss ich diesen wert auch täglich zurücksetzen.
    Dann musst Du dafür kein Setting einrichten, sondern eine Klassenvariable, die beim Start genullt und beim Aufruf inkrementiert wird.

    VB.NET-Quellcode

    1. Private ClickCounter As Integer = 0
    2. Sub Button_Ckick(...)
    3. Me.ClickCounter += 1
    4. Label10.Text = Me.ClickCounter.ToString()
    5. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Spoiler anzeigen
    Gut also ich habe das ganze jetzt in einen counter umgewandelt und speichere den Label wert jetzt mit den Applicationssettings ab.

    Jetzt sind aber immer noch folgende fragen offen.

    Wie sicher ist das speichern in den settings gegenüber manipulationen beim otto normalverbraucher.
    Wie bekomme ich die Setting jeden tag auf 0 Zurückgesetzt am besten mit einer online Datums abfrage


    Edit:
    Irgendwas mache ich falsch denn der wert wird nicht richtig gespeichert und bei jedem programm neustart wird er überschrieben wieder auf 0


    Aktuell hab ich es jetzt mal so versucht aber auch das klappt nicht

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. If Label10.Text = Label12.Text Then
    3. MsgBox("Error")
    4. End If
    5. Me.ClickCounter += 1
    6. Label10.Text = Me.ClickCounter.ToString()
    7. My.Settings.TäglichesLimit = Me.ClickCounter
    8. My.Settings.Save()
    9. My.Settings.Reload()



    Und auch auf diese Weise funktioniert es leider nicht :(

    VB.NET-Quellcode

    1. Me.ClickCounter += 1
    2. Label10.Text = Me.ClickCounter.ToString(My.Settings.TäglichesLimit)
    3. My.Settings.Save()
    4. My.Settings.Reload()




    Der wert wird zwar gespeichert und geladen aber da der counter bei jedem neustart des programmes auf 0 gesetzt wird ist das ganze so nicht umsetzbar
    mit der

    VB.NET-Quellcode

    1. Label10.Text = Val(Label10.Text) + 1


    Variante funktioniert das da der wert hier nicht jedesmal zurückgesetzt wird



    Ich musste aufräumen hab zu viel geschrieben also der aktuelle stand sieht so aus

    VB.NET-Quellcode

    1. Dim Limit As String = "100"
    2. Dim currentLimit As Integer = 0
    3. currentLimit = currentLimit + 1
    4. Label10.Text = String.Concat("Tägl. Limit: ", currentLimit.ToString(), "/", Limit.ToString())
    5. My.Settings.TäglichesLimit = currentLimit()
    6. My.Settings.Save()
    7. My.Settings.Reload()


    Leider stehe ich gerade auf dem schlauch die variable in den settings zu speichern
    Des weiteren habe ich immer noch keine ide die settings zurück zu setzen

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „bigbase“ ()

    bigbase schrieb:

    VB.NET-Quellcode

    1. Dim currentLimit As Integer = 0
    2. currentLimit = currentLimit + 1
    Befindet sich zwischen diesen Zeilen noch eine weitere etwa so:

    VB.NET-Quellcode

    1. Private Sub AnySub()
    :?:
    Machst Du Option Strict On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    bigbase schrieb:

    Leider stehe ich gerade auf dem schlauch die variable in den settings zu speichern
    Des weiteren habe ich immer noch keine ide die settings zurück zu setzen

    Reseten - siehe My.Settings.Reset
    Speichern der Settings ist in VB.NET automatisch beim Schließen der Anwendung vor eingestellt - also brauchst du auch nicht My.Settings.Save schreiben...
    Das My.Settings.Reload brauchst du gar nicht...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()

    @bigbase Sorry, ist nicht Strict.

    Nimm da mal die Klammern weg.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der fehler schaut wie folgt aus

    System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)


    Wenn ich dann einmal den hauptbutton drücke wird die settingsdatei generiert und der fehler verschwindet


    Scheinbar wurden irgendwelche Exceptions verschluckt ich habe den ganzen code jetzt in ein neues projekt gelegt und der fehler ist weg

    @RodFromGermany hast du ne idee wie ich das mit dem täglichen limit zurücksetzen hinbekomme?



    Habe das vorerst so gelöst aber wirklich gefallen tut mir das nicht

    VB.NET-Quellcode

    1. Label10.Text = "Tägl. Limit: " & currentLimit.ToString() & "/" & Limit
    2. txbDate.Text = System.DateTime.Now.Year.ToString + System.DateTime.Now.Month.ToString + System.DateTime.Now.Day.ToString
    3. If My.Settings.Datum < System.DateTime.Now.Year.ToString + System.DateTime.Now.Month.ToString + System.DateTime.Now.Day.ToString Then
    4. My.Settings.TäglichesLimit1 = "0"
    5. My.Settings.Save()
    6. My.Settings.Reload()
    7. End If
    8. My.Settings.Datum = txbDate.Text
    9. My.Settings.Save()
    10. My.Settings.Reload()



    Funktionieren tut das auch nur teilweise

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „bigbase“ ()

    bigbase schrieb:

    ist die settings leer
    Du kannst im Setrtings-Designer einen Defaultwert eintragen.
    =====
    Tägliches Limit zurücksetzen:
    Nimm das aus den Settings raus, da wird die Variable bei Programmstart genullt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    [quote='RodFromGermany','https://www.vb-paradise.de/index.php/Thread/122285-My-Settings-Zurücksetzen-und-Daily-Limit-ohne-sql-Datenbank/?postID=1061864#post1061864'
    Nimm das aus den Settings raus, da wird die Variable bei Programmstart genullt.
    [/quote]

    Ja ich habe gestern nochmal einiges umgeschrieben so funktioniert das ganze jetzt fehlerfrei

    VB.NET-Quellcode

    1. ​ Label10.Text = "Tägl. Limit : " & currentLimit.ToString() & "/" & Limit
    2. If My.Settings.Datum < System.DateTime.Now.Year.ToString + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00") Then
    3. My.Settings.Datum = System.DateTime.Now.Year.ToString + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00")
    4. My.Settings.TäglichesLimit1 = "0"
    5. My.Settings.Save()
    6. My.Settings.Reload()
    7. Application.Restart()
    8. End If
    9. My.Settings.Save()
    10. My.Settings.Reload()



    Das Problem ist das jetzt Jeden tag das programm erst einmal neu starten muss da der settingswert sonst nicht auf dem aktuellen stand ist und nicht abgeglichen werden kann
    Das sieht mir aber garnicht nach Option Strict On aus - siehe post#5 (wo du ein "hilfreich" dran gemacht hattest)
    Das mag nerven, dass ich/wir darauf insistieren, aber grad bei Vergleichen verhält sich ein String oft etwas anders als ein Date.
    Daher ists (mal wieder) von entscheidender Wichtigkeit, zu wissen, womit man arbeitet: ob mit Date oder String - und genau das bleibt dir bei Strict Off verborgen.

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

    Option Strict On sorgt dafür, dass der Code etwas sauberer ist. Ein Beispiel: Die Zahl "5" (achte auf die Anführungsstrich -> es ist ein String) ist nicht gleichzusetzen mit 5 (ist ein Integer, eine Ganzzahl). Das ist einfach unsauber ;) Auch in der Programmierung achtet man auf die Sauberkeit. Man konvertiert somit die Integerzahl erst in einen String, um dann die "5" damit vergleichen zu können.

    bigbase schrieb:

    @ErfinderDesRades erstens habe ich gesagt das ich nicht weis was Option Strict On bewirkt
    Von wegen Lesen: Ich hab es dir doch gesagt: Strict Off bewirkt, dass dir die Kenntnis deiner Datentypen verborgen wird. Strict On bewirkt, dass sie dir aufgedeckt werden.
    Aber so oder so kannst du wohl kaum genau verstehen, wasses bewirkt, ob nun On oder Off.
    Weil die allumfassende Bedeutung und Wichtigkeit der Datentypen im OOP erschließt sich erst mit der Zeit.
    Daher empfehle ich ein bischen Vertrauen in erfahrene Leuts, die dir versichern: Mit Strict Off kann man nicht vernünftig OOP programmieren (lernen).
    Wie gesagt: So oder so kannst dus nicht genau wissen, also es auf Off zu lassen ist aus deiner Sicht ebenso sinnvoll oder sinnlos, wie es auf On zu stellen. Nur letzteres wird dir halt einhellig empfohlen - das gebe ich zu bedenken.

    Wenn Rod sagt, dass habe nichts damit zu tun, dann hat er das vermutlich anders gemeint,
    Oder aber er irrt sich gewaltig.
    Edit - hmm ich finde jetzt grad überhaupt nicht, wo Rod solch gesagt hat - kannst du mir die Stelle angeben, wo er das gesagt hat?

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

    ErfinderDesRades schrieb:

    Wenn Rod sagt, dass habe nichts damit zu tun, dann hat er das vermutlich anders gemeint,
    Jou. Das waren die Klammern bei der Property, die sind auch bei Strict Off fehl am Platze.
    ==============

    bigbase schrieb:

    VB.NET-Quellcode

    1. If My.Settings.Datum < System.DateTime.Now.Year.ToString + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00") Then
    2. My.Settings.Datum = System.DateTime.Now.Year.ToString + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00")
    3. My.Settings.TäglichesLimit1 = "0"
    4. My.Settings.Save()
    5. My.Settings.Reload()
    6. Application.Restart()
    7. End If

    Gib Deinem setting den richtigen Typ Date, dann schmilzt Dein Code mit Option Strict On zu

    VB.NET-Quellcode

    1. If My.Settings.Datum < DateTime.Now.Date Then
    2. My.Settings.Datum = DateTime.Now.Date
    3. 'My.Settings.TäglichesLimit1 = "0"
    4. Application.Restart()
    5. End If
    Vor einem Application.Restart() musst Du die Settings nicht reloaden!
    Per Default werden die Settings beim Beenden gespeichert.
    Wenn Du eine Nicht-Settings-Variable hast, wird die beim Start eh genullt.

    bigbase schrieb:

    Wer lesen kann ist irgendwie klar im vorteil xD
    Jou.
    Ich würde Dich als Beratungsresistent einstufen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    VB.NET-Quellcode

    1. If My.Settings.Datum < DateTime.Now.Date Then
    2. My.Settings.Datum = DateTime.Now.Date
    3. 'My.Settings.TäglichesLimit1 = "0"
    4. Application.Restart()
    5. End If

    Das ist Teilweise hilfreich ich habe auf jedenfall was dazu gelern

    Hier wird aber jetzt nach jedem start der wert auf null gesetzt da die uhrzeit mit gezählt wird und die uhrteit natürlich jede sekunde größer ist


    Okay so gehts hoffe das stimmt

    VB.NET-Quellcode

    1. If My.Settings.Datum < Date.Now.Date Then


    Wie ist es wenn ich jetzt auf kurz oder lang das datum von einer website hole kann ich den text dann auch in ein date objekt wandeln das mit den settings abgleichbar ist?



    Edit übrigens wenn ich Option Stric on mache habe ich 28 Fehler in meinem fast 1000 Zeiligen Code