![]() |
2x am Tag automatisch speichern
In meinem Programm sollen die Daten (MemoFelder) 2x am Tag gespeichert werden.
Es sollte vormittags und Abends gespeichert werden. Die genaue Uhrzeit lässt sich nicht festlegen, da dass Programm (und der PC) nicht den ganzen tag eingeschaltet sind. Stelle mir vor, dass wenn das Programm gestartet wird, wird geprüft ob schon gespeichert wurde, wenn nicht wird geprüft ob es vormittags ist und dann wird gepeichert. Abends dann genau so. Aber irgendwie stehe ich total auf dem Schlauch wie ich sowas realisieren soll. Kan mir jemand von euch vielleicht die nötigen denkanstöße und etwas Input geben ? Danke! |
Re: 2x am Tag automatisch speichern
Zitat:
hätte mal 2 Gedankengänge meinerseits. 1.) Wenn es nicht auf die 2-malige Sicherung ankommt dann lasse einfach einen Timer mitlaufen, welcher den Inhalt z.B. alle 30 Minuten speichert (Das wäre die einfachste Lösung). Dürfte die Performance wohl nicht wesentlich beeinflussen meine ich. 2.) Benutze ein INI-File. Schreibe dazu eigene eigene Prozedur (z.B. SaveMemos). Beim PRogramm starten prüfst Du nach, ob das File vorhanden ist (Nein -> nicht gespeichert und SaveMemos aufrufen). Falls ja, dann aktuelle Uhrzeit dort reinschreiben und Memos sichern. Beim nächsten PRogrammstart wird die INI-Datei gefunden (s.o.). Uhrzeit auslesen und mit aktueller Uhrzeit vergleichen (z.B. Funktion hoursbetween(). Sollte es diese in Delphi 6 noch nicht geben, was ich glaube, dann suche hier im Forum. Gab hier dazu mal einige Lösungen (Stichwort Arbeitszeitmessung...)). Im Programm selbst wieder einen Timer nehmen und beim OnTimer-Ereignis die SaveMemos-Prozedur z.B. alle 8 Stunden aufrufen ("morgens und abends"). Zitat:
HOffe es war nicht zu wirr geschrieben und ich konnte Dir etwas weiterhelfen... SCRaT |
Re: 2x am Tag automatisch speichern
Timer lösung geht nicht... 2x Täglich ist wichtig.
Das Programm soll eine Topliste aus dem Internet laden und diese 2x am Tag speichern. Diese TopListe ist in einem Memo zwischengespeichert. Diese Topliste wird zwar die ganze zeit im programm angezeigt, aber soll wie gesagt nur 2x am Tag gespeichert werden. Das Memo wird gespeichert unter dem namen: tag.monat.jahr-stunde.minute..html und es wird bei jedem speichern ein neues angelegt. Dachte mir auch schon ,dass die letzte speicherung in ein ini-file geschrieben wird, beim programmstart wird die ini gelesen. alledings läuft das programm manchmal sehr viele stunden. daher müßte auch ein timer her, der alle stunde prüft ob gesichert werden muss. Aber eben genau um die prozedur der überprüfung geht es, wie soll ich das realisieren? Glaube HourSpan (Funktion) oder WithinPastMinutes (Funktion) könnte das richtige sein, werde das später mal testen wenn ich daheim bin. Oder kennt jemand eine bessere lösung? |
Re: 2x am Tag automatisch speichern
Zitat:
Da wäre die Timervariante besser. Noch besser ein eigener Thread, der das überwacht. Grüße, Messie |
Re: 2x am Tag automatisch speichern
@BBoy
erstell dir eine Dummy-Datei, schreibe rein wofür sie gut ist, und änder das Änderungsdatum der Datei. So hast Du immer einen Anhaltspunkt wann das letzte mal was gemacht wurde. Du Speicherst und änderst das Datum der Datei. Beim Programmstart testest Du das Datum der Datei. Im Programm schreibst Du eine Funktion die immer ausgeführt wird wenn nichts zu tun ist, Idle. Oder setzt einen Time auf eine Stunde und testest dann ab. :firejump: |
Re: 2x am Tag automatisch speichern
Zitat:
Nach dem Start brauchst Du aber - wenn kein Thread wie angedeutet - noch einen Timer. Das ONTimer-Even könntest Du dann z.B. alle 10 MInuten aufrufen und prüfen ob morgens bzw. abends schon gespeichert wurde. Falls nein, dann ggf. die Speicher-Prozedur aufrufen. Deswegen auslagern des Speicherns, da die PRozedur mehrmals im Code (ONCreate, OnClose, ONTimer) verwendet werden soll. Um zu prüfen ob schon gespeichert wurde, könntest Du folgendes machen: Beim programmstart: 1. Letzte PRüfung auslesen (INI-Datei --> TDateTime Variable) 2. Varialbe setzen für letzte sicherung (z.B. integer 1=morgens gesichert, 2=abends gesichert) Beim ONTimer-Event: 3. Aktuelle Zeit auslesen 4. WEnn 3. zwsichen 8 und 9 Uhr UND variable = 2 (letzte sicherung abends)--> sichern und variable auf 1 setzen 5. wenn 3. zwischen 19 und 20 Uhr UND variable =1 (s. oben) --> sichern und variable auf 2 setzen. Ggf. musst Du auch noch das Datum prüfen falls der PC z.B. 2 Tage aus war. Kurz gesagt: Timer alle 5 MInuten aufrufen und wenn bei Timeraufruf aktuelle Uhrzeit abends bzw. morgens entspricht (zeitspanne) dann sichern und "backup_flag" entsprechend setzen, damit während der Zeitspanne nicht öfters gespeichert wird (timer wird ja alle x Min. aufgerufen). Eine andere Möglichkeit sehe ich nicht auf die Schnelle. SCRaT |
Re: 2x am Tag automatisch speichern
So wie Scrat vorgeschlagen gehts auch noch schneller:
alle 30 Minuten einen Speicherversuch starten, über Timer. Im Timer ermittelst du den Dateiname. Dort muss das Datum rein, und ob es vormittags oder nachmittags ist. Also etwa so:
Code:
Existiert der berechnete Dateiname bereits, dann Prozedur beenden, ansonsten eben speichern.
2007-05-09PM
2997-05-09AM |
Re: 2x am Tag automatisch speichern
Zitat:
Allerdings: Zitat:
|
Re: 2x am Tag automatisch speichern
Zitat:
In diesem Falls nicht FileExists, sondern FindFirst prüfen ob eine Datei existiert, da dort Masken verwendet werden können. :angel: FindFirst('jahr.monat.tag.-*.html', ...) FindFirst('jahr.monat.tag.-*.*.html', ...) oder auch FindFirst('jahr.monat.tag.-??.??.html', ...) PS: für 'ne bessere Sortierung im Explorer könnte es aber besser sein, wenn du mit den Großen Werten anfängst. jahr.monat.tag.-stunde.minute.html oder jahr.monat.tag..html |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz