AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2x am Tag automatisch speichern

Ein Thema von BBoy · begonnen am 9. Mai 2007 · letzter Beitrag vom 9. Mai 2007
Antwort Antwort
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

2x am Tag automatisch speichern

  Alt 9. Mai 2007, 11:36
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!
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 11:54
Zitat von BBoy:
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!
Hallo bboy,

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:
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.
Das verstehe ich nicht ganz. Wenn das Programm gestartet wurde und vorher nicht gespeichert wurde, dann wären die zu speichernden Daten sowieso nicht mehr vorhanden?!?! Oder verstehe ich da was nicht so ganz? Wäre es nicht sinnvoll die Daten beim beenden auf jeden Fall im OnClose-Eregnis zu sichern (auch hier dann SaveMemos aufrufen - aber ohne Check ob die Zeit rum ist, d.h. auf jeden Fall beim beenden speichern...)

HOffe es war nicht zu wirr geschrieben und ich konnte Dir etwas weiterhelfen...

SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 13:26
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?
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 13:35
Zitat von BBoy:
Glaube HourSpan (Funktion) oder WithinPastMinutes (Funktion) könnte das richtige sein
Das Hauptproblem dürfte sein, daß Du zum Speichern einen sich wiederholenden Programmablauf brauchst. Wenn Du ein reines ereignisgesteuertes Programm hast, wird das schwierig. Denn Du mußt ja die Prüfung ob gespeichert wurde erstmal vornehmen. Nur beim Start kann schiefgehen, wenn jemand das Programm nicht schließt und wieder öffnet.
Da wäre die Timervariante besser. Noch besser ein eigener Thread, der das überwacht.

Grüße, Messie
  Mit Zitat antworten Zitat
Nachtreiter
(Gast)

n/a Beiträge
 
#5

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 14:04
@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.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 15:15
Zitat:
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?
Genau das meinte ich mit meiner 2. Variante. Einfach die Speichern-Prozedur in eine eigene Prozedur auslagern. Diese dann beim Start (Stichwort: ini-Datei Datum/Zeit auslesen) ggf. aufrufen. In der Prozedur nur die Speicher-Routine inkl. INI-Datei schreiben einfügen.

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
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 15:22
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:
2007-05-09PM
2997-05-09AM
Existiert der berechnete Dateiname bereits, dann Prozedur beenden, ansonsten eben speichern.
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#8

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 15:48
Zitat von Jelly:
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:
2007-05-09PM
2997-05-09AM
Existiert der berechnete Dateiname bereits, dann Prozedur beenden, ansonsten eben speichern.
Die Lösung finde ich genial! Simpel mit nem einfachen If Fileexists und ohne (große) berechnungen und ohne INI-File zu lösen!

Allerdings:
Zitat von BBoy:
Das Memo wird gespeichert unter dem namen: tag.monat.jahr-stunde.minute..html ....
Den Filenamen müsste man dann hald wenn möglich um die Stunden und Minuten erleichtern.
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: 2x am Tag automatisch speichern

  Alt 9. Mai 2007, 17:24
Zitat von TeronG:
Den Filenamen müsste man dann hald wenn möglich um die Stunden und Minuten erleichtern.
Nicht unbedingt, denn das genaue datum könnte ja auch nötig sein (wobei man dieses auch in der HTML-Datei abseichern/anzeigen kann)

In diesem Falls nicht FileExists, sondern FindFirst prüfen ob eine Datei existiert, da dort Masken verwendet werden können.

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
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz