Autor Beitrag
csigg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 10.05.05 07:40 
Kennt jemand ne einfache kleine Scheduler Komponente, oder irgend ne andere Möglichkeit wie das Problem am besten zu Realisieren ist:

Ich hab ne Datenbank(interbase 6) und die will ich zu bestimmtem (am Programmstart bestimmbaren) Zeiten starten. Hatte bis jetzt ein Timer der jede Minute prüft ob die eingegebene Zeit mit der aktuellen Übereinstimmt, hattet bis jetzt aber nicht zuverlässig funktioniert.
Hat jemand ne Idee wie ich das am besten Lösen könnte.

Hier mal noch nen kleine Code-Abschnitt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TDatenbankVerwaltung.Timer1Timer(Sender: TObject);
var Stunde: Word;
    Minute: Word;
    Sekunde: Word;
    MilliSekunde: Word;
begin
ShowMessage('Timer ausgelöst');
 DecodeTime(now(), Stunde, Minute, Sekunde, MilliSekunde);
 if chbAktiv1.Enabled then
 begin
     if meStartzeit1.Text = intToStr(Stunde) + ':' + intToStr(Minute) then
     begin
     Timer1.Enabled := false;
     Timer1.Enabled :=true;
     Backup(edtDBNameZP.Text, edtDateiname1.Text);
     end;
 end;


Ich befürchte dass das ganze an der If Abfrage liegt, da das ShowMessage, welches ich zu Testzwecken eingefügt habe mal jede Minute ausgelöst wird.


Moderiert von user profile iconGausi: Topic aus VCL (Visual Component Library) verschoben am Di 10.05.2005 um 10:37
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 10.05.05 07:50 
Du solltest das nicht als String vergleichen, sondern "echte" Zeitwerte.
Außerdem kein Vergleich auf Gleichheit.
Folgende Empfehlung:
Deine Startzeit rechnest du um in einen vollständigen Zeitpunkt mit Datum und Uhrzeit.
Dann kannst du
ausblenden Delphi-Quelltext
1:
   if Zeitpunkt < Now then begin					

schreiben.

Das Problem ist nämlich, dass dein Programm ausgelastet sein könnte, wenn der Timer ausgelöst werden müsste. Dann kommt das ein paar Sekunden später und du hast Pech, weil dann nicht mehr die gleiche Minute läuft.
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 10.05.05 07:54 
Ich hab den Fehler gefunden, der Vergleich heisst 08:44 = 8:44 und das erkennt er dan wohl nicht als gleichwertig, würde heissen, jeden morgen geht das Backup nicht *g*.

Das heisst ich muss ja praktisch dann halt die Uhrzeit bei der einmal aktiviert wurde löschen, sonst stimmt das kleiner ja immer bei allen schoon gebrauchten.

Ich hab glaub vergessen zu erwähnen dass die untere IF 6x vorkommt, da ich 6 Eingabefelder hab, für theoretisch 6 Backups am Tag.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 10.05.05 08:00 
user profile iconcsigg hat folgendes geschrieben:
Ich hab den Fehler gefunden, der Vergleich heisst 08:44 = 8:44 und das erkennt er dan wohl nicht als gleichwertig, würde heissen, jeden morgen geht das Backup nicht *g*.

Das heisst ich muss ja praktisch dann halt die Uhrzeit bei der einmal aktiviert wurde löschen, sonst stimmt das kleiner ja immer bei allen schoon gebrauchten.

Ich hab glaub vergessen zu erwähnen dass die untere IF 6x vorkommt, da ich 6 Eingabefelder hab, für theoretisch 6 Backups am Tag.

Mach dir ein Array mit den aktuell gültigen Zeiten. Dies läufst du im Timer durch. Ist eins zutreffend, kannst du dort gleich den neuen Wert eintragen.
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 10.05.05 08:10 
wie mach ich denn in delphi ein Array mit 6 Felder TTime??
*sorry ich komm von c++, da gibts kein TTime*

und noch ganz wichtig, ich muss das feld dynamisch machen, muss wenn alle 6 Eingabe-Felder bei mir aktiviert sind ein Array mit 6 Feldern erstellen, und bei jeden abgearbeiteten Feld muss dieses dann in der DB gelöscht werden, dass der selbe Auftrag nicht nochmal abgearbeitet wird.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 10.05.05 08:28 
Ich habe das so ähnlich gelöst (Source-Auszüge):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  TEventRecord = Record
    Anwendung  : ANSIString; // Brauche ich für ein ShellExecute. Du könntest dort eintragen, was du machen möchtest
    StartDatum : TDate; // Brauche ich zur internen Verwaltung
    StartZeit  : TTime; // Brauche ich zur internen Verwaltung
    Zeitpunkt  : TDateTime; // Eigentlich das einzige, was du benötigst
  end;

Var
  EventArray : Array [0..5] of TEventRecord;
// oder:
  EventArray : Array [0..5] of TDateTime;
// Dann brauchst du den obigen Record gar nicht.

Dann musst du beim Programmstart dieses Array füllen.
Im Timer-Event musst du dann nur noch den Zeitpunkt prüfen und evtl. neu setzen.

user profile iconcsigg hat folgendes geschrieben:
und noch ganz wichtig, ich muss das feld dynamisch machen, muss wenn alle 6 Eingabe-Felder bei mir aktiviert sind ein Array mit 6 Feldern erstellen, und bei jeden abgearbeiteten Feld muss dieses dann in der DB gelöscht werden, dass der selbe Auftrag nicht nochmal abgearbeitet wird.

Also ein bisschen musst du schon noch selbst machen. Ich wollte das Programm nicht für dich schreiben. :wink:
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 10.05.05 12:04 
ich hab jetzt ein StringGRid genommen, das kann ich ja auch als Feld benutzen.
Hat jemand ne gut Idee wie ich nun das mit der Uhrzeit vergleichen kann, ich will nicht unbedingt alle angearbeiteten Zeilen löschen. Obwohl das vielleicht auch nicht so schlimm wäre
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 10.05.05 18:04 
user profile iconcsigg hat folgendes geschrieben:
ich hab jetzt ein StringGRid genommen, das kann ich ja auch als Feld benutzen.

Ich rate dir immer noch davon ab, das ganze als String-Vergleich zu machen. Das müsstest du nämlich, wenn du direkt mit den Zellinhalten des StringGrids arbeitest.

Übrigens hat Windows einen eigenen Scheduler. Warum benutzt du den nicht?
Übrigens ist auf meiner HP im Download-Bereich eine Service-Demo, die genau das macht, worüber wir hier diskutieren. Ob du allerdings meinen Service verwenden willst oder den Windows-Scheduler ist wohl ziemlich egal.
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Mi 11.05.05 07:34 
also ich vergleiche jetzt auf <. Das passt soweit ganz gut, allerdings muss ich jetzt halt alle abgearbeiteten Aufträge löschen, und dazu sollte ich wissen wie ich aus dem StringGrid eine Zeile löschen kann.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 11.05.05 07:45 
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Mi 11.05.05 07:58 
hab bei Google schon einiges gefunden gehabt, danke.
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Mi 11.05.05 11:49 
Wo find ich denn infos zu dem Windows scheduler??
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 11.05.05 11:51 
Findest du bei XP so:
Start->Alle Programme->Zubehör->Systemprogramme->Geplante Tasks
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Mi 11.05.05 11:54 
kann ich den denn von Delphi aus auch benützen??
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 11.05.05 12:13 
Habe ich noch nicht versucht. Könnte ich mir aber gut vorstellen, dass das möglich ist. Schon mal google gefragt? Vielleicht gibts auch einen API-Call.
[LAUTES_RUFEN]Hey Luckie! Weißt du da was?[/LAUTES_RUFEN]
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Mi 11.05.05 12:16 
google hat gemeint es weiss nix sinnvolles. Soll ich mal das Oracle von Delphi (wahnsinn gelich 2 Programme) fragen *g*.