Hallo
Ich möchte beim Starten vom DB ein Formular öffnen mit bestimmten Datensatz.
Der Formular hat ein Datumfeld. Am besten wenn der Datensatz heraussucht wird, mit heutigem Datum (Funktion jetzt() ). Wenn das nicht geht, dann ein ausgewähltes Datum z.B. 01.08.2015.
Wie geht das?
Hi,
stelle das Formular als Startformular ein und binde es an eine Abfrage, in der das Datumsfeld nach dem aktuellen Datum (=Date()) gefiltert wird.
Danke MaggieMay, nur wenn ich das mache, bekomme ich Datensatz nur mit dem heutigen Datum.
Ich will aber die Möglichkeit haben, weiter zu blättern (Tag davor, Tag danach etc.) ,aber das klappt nicht, wegen dem Filter
Ok, dann setze einen Filter beim Laden des Formulars oder springe auf den gesuchten Datensatz mit Me.Recordset.FindFirst + Kriterium.
Ok, dann setze einen Filter beim Laden des Formulars oder springe auf den gesuchten Datensatz mit Me.Recordset.FindFirst + Kriterium
Mit dem Kriterium habe ich mehrmals versucht, aber ich kriege das mit aktuellem Datum nicht hin.
Das ist gut, wenn man Textfeld hat, aber mit Datumfeld finde ich leider nichts.
Beim Filter auch im Formular zeigt er mir nur den Datensatz "heute". Ich will mit heute beginnen, aber weiter blättern können zu den weiteren Datensätzen
Hallo,
Du darfst nicht filtern, sondern Du musst suchen. Wie von MaggieMay in #3 bereits vorgeschlagen. Zeige bitte mal den vollständigen aktuelle verwendeten Code.
Auch den im Laden Ereignis und das Kriterium.
Das solltest Du immer gleich machen und nicht erst auf Rückfrage.
Private Sub Form_Load()
Me.Recordset.FindFirst "[Startdatum] = Datum()" & Format(Me!Startdatum, "yyyy-mm-dd") & "#"
End Sub
Wo als Datum () will ich das heutige Datum
Ganz einfach so:
Private Sub Form_Load()
Me.Recordset.FindFirst "[Startdatum] = Date()"
End Sub
Jaaaaa! Danke MaggieMay! Endlich funktioniert!
Hallo! Ich bin neu im Forum und habe als blutiger Access-Anfänger bisher alle herausforderungen mit der Suche lösen können. Vielen Dank allen Helferinnen und Helfern!
Nun habe ich eine Frage zu dieser Funktion, die ganz hervorragend funktioniert.
Zitat von: MaggieMay am Juli 17, 2015, 10:59:14
Ganz einfach so:
Private Sub Form_Load()
Me.Recordset.FindFirst "[Startdatum] = Date()"
End Sub
Ich habe in der Datenbank nicht für jedes Datum einen Eintrag. Wenn also für heute keine Eintrag existiert, dann springt das Formular auf den datumsmäßig ersten Datensatz. Probiert hätte ich es mit
Me.Recordset.FindFirst "[Startdatum] >= Date()" aber das klappt nicht...
Ich wäre sehr dankbar, wenn Ihr mir hier helfen könnt - ich seh die Lösung derzeit nicht und mit IF - THEN hab ich mich völlig in die Ecke manövriert.
Herzlichen Gruß
Wolfgang
Hallo,
Was ist denn nun deine Frage, bzw. das Problem?
ZitatWenn also für heute keine Eintrag existiert, dann springt das Formular auf den datumsmäßig ersten Datensatz
Das heißt, er bleibt auf dem ersten DS stehen, weil kein passender DS gefunden wird.
Welcher Datensatz soll denn in diesem Fall herangezogen werden?
Auf welches Datum willst Du denn fokussieren?
Falls jenes, das im Kriterium angegeben ist (hier das heutige Datum), nicht gefunden wird, springt der Datensatzzeiger auf den ersten Datensatz des Recordsets, so wie Du es erlebst.
Für eine kurz gesprungene Alternative (morgen, wenn nicht heute) könnte man folgendes anwenden:
Private Sub Form_Load()
With Me.Recordset
.FindFirst "[Startdatum] = Date()"
If .NoMatch Then .FindFirst "[Startdatum] = Date() + 1"
End With
End Sub
Oder, falls es grössere Lücken geben sollte
Private Sub Form_Load()
Dim z As Integer
With Me.Recordset
.FindFirst "[Startdatum] = Date()"
If .NoMatch Then
z = 1
Do While .NoMatch
FindFirst "[Startdatum] = Date() + " & z
z = z + 1
Loop
End If
End With
End Sub
gruss ekkehard
Herzlichen Dank für die hilfreichenden Auskünfte. Ihr habt mir den rechten Weg gewiesen - auch wenn ich zugegeben den Kern meines Anliegens nicht ausformuliert habe. Ich gelobe Besserung!
Ja, es ging mir tatsächlich darum, wenn für den heutigen Tag kein Eintrag vorhanden ist, auf den morgigen Eintrag zu springen.
Tatsächlich reicht das für mich, da lediglich eine Lücke von einem Tag vorkommen kann.
Vielen herzlichen Dank allen Helferinnen und Helfern!
Wolfgang
Edit: Habe jetzt doch die "große" Lösung umgesetzt
Private Sub Form_Load()
Dim z As Integer
With Me.Recordset
.FindFirst "[Startdatum] = Date()"
If .NoMatch Then
z = 1
Do While .NoMatch
.FindFirst "[Startdatum] = Date() + " & z
z = z + 1
Loop
End If
End With
End Sub
Hallo,
täte es dies nicht auch?:
.
.
Me.Recordset.FindFirst "[Startdatum] >= Date()"
.
.
Diesen Ansatz hätte ich versucht, geklappt hat er leider nicht. Ist das Größer-Zeichen beim Datum ev. zu unspezifisch wenn es mehr als ein Element gibt, das größer ist?
Gruß
Wolfgang
Hallo,
Zitatgeklappt hat er leider nicht.
Das ist einer der Antworten die bei den Helfenden den Blutdruck deutlich erhöhen. ;D Das solltest Du Dir gleich abgeöhnen.
Bitte beschreibe genau was nicht gegangen ist, ggf. mit Fehlermeldung.
Außerdem ist es natürlich sinnvoll, den Code hier zu zeigen (von der 1. bis zur letzten Zeile) mit es nicht gegangen ist.
Wie sonst soll man da einen Fehler erkennen?
Der von Franz gezeigte Code sollte nämlich funktionieren.
Nur zur Sicherheit die Fragen:
- Der Datentyp des Feldes Startdatum ist Datum/Uhrzeit ?
- Enthält das Feld auch die Uhrzeit ?
Blutdruck wollen wir nicht... das ist ganz schlecht. Dafür ist meiner jetzt in der Höhe...
Ich habe beim Öffnen diesen Code hinterlegt:
Private Sub Form_Open(Cancel As Integer)
Me.Recordset.FindFirst "[Datum] >= Date()"
End Sub
Es hat zuvor keine Fehlermeldung gegeben und hat einfach den gewünschten Wert nicht angezeigt. Keine Ahnung warum, aber jetzt klappt das. Ich versteh jetzt gerade die Welt nicht mehr... :o
Doch, jetzt... "Cancel As Integer" hat gefehlt.... :P Ich habe das jetzt mal in einer alten Version der Datenbank ausprobiert. Wenn ich die Datenbank um alle anderen Codes bereinige, dann gibt es ohne diesen Zusatz gibt es jetzt auch eine Fehlermeldung. Vermutlich habe ich da einfach weiterprogrammiert, ein anderer Code hat dann die Operation abgebrochen. Anders kann ich mir das jetzt nicht erklären.
Die Fehlermeldung lautet:
Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Beim Öffnen eingegeben. Dieser Ausdruck hat einen Fehler verursacht: Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder eine Prozedur mit demselben Namen.
* Der Azsdruck gibt möglicherweise weder den Namen eine Makros noch den Namen einer benutzerdefinierten Funktion noch [Ereignisprozedur] zurück.
* Beim Auswerten einer Funktion, eines Ereignisses oder eines Makros tratmöglicherweise ein Fehler auf.
Nein, Zeit enthält das Feld nicht - Datum lang, ist die Einstellung.
Gruß Wolfgang
Me.Recordset.FindFirst "[Startdatum] >= Date()"
Man sollte aber beachten, dass der Code das tut, was er beschreibt. Das erste gefundene Datum muss nicht heute, morgen oder so sein, sondern kann in ferner Zukunft liegen, es sei denn, das Recordset liegt in der nötigen Sortierung vor. Das müsste man sicherstellen, nicht nur daran glauben.