PDA

Vollständige Version anzeigen : Zeitsteuerung Formular


breschi39
23.02.2008, 14:55
Guten Tag zusammen
Ich habe ein Formular mit dem Feld Zeit (z.B 08:40 oder 13:30 etc.) und weiteren Feldern.
Wie bringe ich es fertig, dass bei geöffnetem Formular bei Erreichen der effektiven Zeit abzüglich 3 Min, also hier um 08:37h eine Meldung erscheint: "Aufgabe zu erledigen" mit Signalton. Die Meldung soll dann einfach mit OK bestätigt werden können. Nächste Meldung um 13:27h usw.
Wichtig: am nächsten Tag müssen die Meldungen wieder erscheinen. Wenn das Formular geöffnet wird, dürfen abgelaufene Termine nicht gemeldet werden. P.S: Die Beispieldatenbank "Zeitsteuerung", auf die hier öfters verwiesen wird, bringt mich nicht ans Ziel.

KarMulholand
23.02.2008, 15:16
mit einem 'Timer' lässt sich das machen

hcscherzer
23.02.2008, 15:59
mit einem 'Timer' lässt sich das machenEin wenig ausführlicher: bei den Formulareigenschaften gibt es das Ereignis 'Bei Zeitgeber'. Erstelle dafür eine Ereignisprozedur. Setze das Zeitgeberintervall auf so viele Millisekunden wie Du verstreichen lassen möchtest, bis die Ereignisprozedur erneut aufgerufen wird.
In der Prozedur überwachst Du dann das Feld gegen die Systemuhr:Private Sub Form_Timer()
if datediff("n", now(), me!datfeld) < 3 then
msgbox "Aufwachen"
endif
End Sub

Josef P.
23.02.2008, 16:12
Ich traue Formular-Timern nicht über den Weg, wenn ich parallel dazu etwas anderes machen will.

Wenn ich die Anforderung aus #1 umsetzen wollte, würde ich mir überlegen, ob ich das nicht einem anderern Programm übergebe. In meinem Fall wäre das Outlook, dem ich per VBA Aufgaben/Termine inkl. Erinnerungsfunktion übergeben könnte.
Oder ich starte mir eine extra Access-Instanz, die nichts anderes macht, als die Terminüberwachung durchzuführen.

breschi39
23.02.2008, 16:47
An Hans-Christian:
Die VBA mit "datediff" tönt vielversprechend und ich konnte es auch in mein Formular übernehmen.
Aber die Meldung "Aufwachen" kommt alle 30 Sek. (Zeitgeber auf 30000 eingestellt), statt an den Zeitpunkten im Formular!
P.S: ich habe "datfield" durch "zeit" ersetzt, wie das Feld bei mir heisst.
Was heisst eigentlich "n" nach datefiff?
Grüsse Peter

hcscherzer
23.02.2008, 17:48
30000 entspricht 30 Sekunden, das ist korrekt.
ich habe "datfield" durch "zeit" ersetztDu solltest Felder nicht mit reservierten Namen benennen, 'zeit' könnte dazugehören.
Was steht denn drin im Feld 'Zeit'? Nur die Uhrzeit? Dann solltest Du mal versuchen, das aktuelle Datum hinzuzufügen, denn die Funktion Now() liefert nicht nur die Uhrzeit sondern auch das aktuelle Datum.
Und dann musst Du latürnich selbst dafür Sorge tragen, dass der Wert im Feld sich nach dem Quittieren ändert, sonst ist es logisch, dass der Weckruf immer wieder kömmt, die Uhr läuft ja immer weiter und wenn der Termin vorbei ist, ist der Wert von datediff() negativ und das ist immer kleiner als 3.
Das 'n' steht für Minuten. Vielleicht solltest Du gelegentlich auch mal in die Online Hilfe schauen?

breschi39
23.02.2008, 21:17
30000 entspricht 30 Sekunden, das ist korrekt.
Du solltest Felder nicht mit reservierten Namen benennen, 'zeit' könnte dazugehören.
Was steht denn drin im Feld 'Zeit'? Nur die Uhrzeit? Dann solltest Du mal versuchen, das aktuelle Datum hinzuzufügen, denn die Funktion Now() liefert nicht nur die Uhrzeit sondern auch das aktuelle Datum.
Und dann musst Du latürnich selbst dafür Sorge tragen, dass der Wert im Feld sich nach dem Quittieren ändert, sonst ist es logisch, dass der Weckruf immer wieder kömmt, die Uhr läuft ja immer weiter und wenn der Termin vorbei ist, ist der Wert von datediff() negativ und das ist immer kleiner als 3.
Das 'n' steht für Minuten. Vielleicht solltest Du gelegentlich auch mal in die Online Hilfe schauen?
Klar, "n" steht für Minuten, hätte ich selbst drauf kommen müssen.
Das Ganze wird mir zu kompliziert. Das Feld Zeit ist im Format "Zeit 24 Std" und das Formular will ich gegen Bearbeiten sperren, damit es geschützt ist (mehrere Benutzer). Ich habe je ein Formular für Mo-Do, Fr, Sa und So gemacht und die Zeit ist nur eine Zeitangabe ohne Datum, bei deren Erreichen eine Aufgabe fällig ist. Gibt es keine Möglichkeit, beim Erreichen der Zeit eine Meldung zu setzen ohne dass ein Datum mitgezählt wird?

hcscherzer
24.02.2008, 14:50
Selbstverständlich ist das möglich.
Du kannst doch auch beim Öffnen des Formulars das aktuelle Datum plus die gewünschte Uhrzeit ins Formularfeld setzen und - in der Prozedur in #3 - die Uhrzeit nach jedem Weckruf für den nächsten Alarm vorstellen.
Mit ein bisschen Studium der diversen Datumsfunktionen in der Online Hilfe kommst Du vielleicht selbst drauf?
Zur Diskussion stehen DateSerial() und TimeSerial(). DateDiff() kennst Du ja schon und vielleicht schaust Du Dir auch noch DateAdd() an.
Ausserdem gibt es hier im Forum wunderbare Schätze zu heben. Schau mal in Code-Archiv, da wirst Du sicher fündig.

breschi39
25.02.2008, 14:29
Ich habe versucht im Access Code-Archiv etwas zu finden, aber bis jetzt erfolglos. Es ist auch sehr zeitaufwendig, wenn man von VBA praktisch nichts versteht. Ich hoffe immer noch, es schreibt jemand, was für einen Code ich einbauen muss für mein Anliegen.