Datensatz anzeigen abhäng Datum, Zeit

Vor lauter Bäumen…
Win XP Pro
Access 2003
Formular, das (mit einer Abfrage sortiert) Daten nach Datum und Zeit anzeigt.
Jetzt möchte ich, dass die Anzeige automatisch auf den Datensatz springt, der dem aktuellen Datum und der aktuellen Zeit (also heute, z.b. 15:00 Uhr) am nächsten ist. Da nicht Datensätze mit allen möglichen Zeiten vorhanden sind, sollte er beim letztmöglichen Datensatz (also z.B. mit der Zeit 14:30) stehen bleiben. (Prozedur beim Öffnen des Formulars)
Ich schaff’s einfach nicht.
Herzlichen Dank für die Hilfe.
Beat

Hallo,

Formular, das (mit einer Abfrage sortiert) Daten nach Datum
und Zeit anzeigt.
Jetzt möchte ich, dass die Anzeige automatisch auf den
Datensatz springt, der dem aktuellen Datum und der aktuellen
Zeit (also heute, z.b. 15:00 Uhr) am nächsten ist.

wonach sortierst Du denn? Wenn Du nach dem Datum sortieren würdest, könntest Du den aktuellsten Datensatz ganz oben im Formular plazieren.

Ansonsten würde ich mit VBA den gewünschten Datensatz identifizieren (z. B. die Abfrage im Hintergrund nach Datum sortieren und dann den Primärschlüssel des ersten Datensatzes in Variable speichern) und dann diesen im Formular mit DoCmd.FindRecord zum aktuellen machen.

Wenn Du auch Datensätze hast, die datumsmäßig in der Zukunft liegen, könnte man mit einer Schleife über alle Datensatze über die DateDiff-Funktion den mit der kleinsten Abweichung zu Now herausbekommen.

ujk

wonach sortierst Du denn? Wenn Du nach dem Datum sortieren
würdest, könntest Du den aktuellsten Datensatz ganz oben im
Formular plazieren.

Es muss nach Programmnummern sortiert sein. Diese sind aber nicht zwingend chronologisch mit dem Datum und der Zeit.

Ansonsten würde ich mit VBA den gewünschten Datensatz
identifizieren (z. B. die Abfrage im Hintergrund nach Datum
sortieren und dann den Primärschlüssel des ersten Datensatzes
in Variable speichern) und dann diesen im Formular mit
DoCmd.FindRecord zum aktuellen machen.

Uff, das klingt recht kompliziert.

Wenn Du auch Datensätze hast, die datumsmäßig in der Zukunft
liegen, könnte man mit einer Schleife über alle Datensatze
über die DateDiff-Funktion den mit der kleinsten Abweichung zu
Now herausbekommen.

Das habe ich. Daten die sowohl in der Vergangenheit, in der Gegenwart und in der Zukunft liegen. Das Ziel ist, in dieser Datenflut den Programmpunkt auf dem Bildschirm zu sehen (nebst weiteren natürlich), der als nächstes kommt (eben gemäss Datum und Zeit).
Diese Lösung klingt vielversprechend. Wie formuliere ich das? (Die Tabelle umfasst u.a. Pgm-Nr., Datum, Zeit, Name, Vorname, etc.)

ujk

Jetzt schon herzlichen Dank für die Hilfe.
Beat

Hallo,

Das habe ich. Daten die sowohl in der Vergangenheit, in der
Gegenwart und in der Zukunft liegen. Das Ziel ist, in dieser
Datenflut den Programmpunkt auf dem Bildschirm zu sehen (nebst
weiteren natürlich), der als nächstes kommt (eben gemäss Datum
und Zeit).
Diese Lösung klingt vielversprechend. Wie formuliere ich das?
(Die Tabelle umfasst u.a. Pgm-Nr., Datum, Zeit, Name, Vorname,
etc.)

warum hast Du denn Datum und Zeit getrennt? Wenn die gemeinsam in einem Feld stehen wäre es einfacher. Aber geht auch so.

Schritt 1 wäre eine Abfrage anzulegen, die Pgm-Nr. (=Primärschlüssel?), Datum und Zeit enthält und einen Ausdruck
Ausdr1: [Datum]+[Zeit]-Jetzt()
und nach diesem sagen wir aufsteigend geordnet ist. Ausserdem gibst Du für diesen Ausdruck das Kriterium >0 an. Der erste Datensatz in der Abfrage liegt dann am nächsten in der Zukunft.
Schritt 2 eine Prozedur (VBA) für das BeimÖffnen-Ereignis des Formulars anlegen. Darin öffnest Du die Abfrage als Recordset (schau in die Access-Hilfe), wendest die MoveFirst-Methode auf das Recordset an, damit machst Du den ersten Datensatz der Abfrage zum aktuellen. Dann liest Du daraus die Pgm-Nr. aus und springst diese dann im Formular an.

Ungefähr so:

Dim db As Datbase, rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset(„Name_der_Abfrage“, dbOpenSnapshot)
rst.MoveFirst
Forms![Formularname]![Pgm-Nr.].SetFocus
DoCmd.FindRecord rst![Pgm-Nr.]
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing

ujk

Herzlichen Dank für die guten Anweisungen. Da werde ich mich in den nächsten Tagen gleich mal dranmachen. Es klingt auf jeden Fall gut, und ich glaube, so kann das realisiert werden.
Many thanks.
Beat