Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Thors1204 am November 28, 2016, 11:27:47

Titel: Tageweise durch Datensätze springen
Beitrag von: Thors1204 am November 28, 2016, 11:27:47
Hallo,

ich benötige die Hilfe von erfahrenen Access-Anwender, da ich mich erst kürzlich mit Access angefreundet habe.
Ich möchte folgendes umsetzen:

In einem Formular, das sich auf eine Tabelle bezieht in der u.a. Datum und Uhrzeit eingetragen wird, möchte ich mittels Schaltflächen von einem Tag zum nächsten springen können, egal wie viele Datensätze der jeweilige Tag enthält. D.h. bei jedem Klick in die entsprechende Richtung, möchte ich auf den ersten Datensatz des jeweils nächsten bzw. vorherigen Tages springen.

Ich vermute mal, das lässt sich nur mittels VBA umsetzen und nicht mit den Standardmöglichkeiten innerhalb der Formularerstellung?

Vielen Dank für Eure hilfreichen Tipps!

Gruß,
Thorsten
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: DF6GL am November 28, 2016, 12:36:58
Hallo,

erstelle zwei Buttons ("btnNext", "btnBack")  mit deren Ereignisprozeduren "Beim Klicken":

Sub btnNext_Click()
Docmd.Gotorecord,,acNext
End Sub

Sub btnBack_Click()
Docmd.GotoRecord,,acPrevious
End Sub

(ohne Fehlerbehandlung)

Alternativ kann das Ganze auch mit den entspr.  Makros erreicht werden.
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Beaker s.a. am November 28, 2016, 12:40:46
Hallo Thorsten,
Mein Vorschlag (Franz' berücksichtigt ja nicht die Anzahl der DS.
Quick & Dirty (Luftcode):

    Dim rst as DAO.Recordset
    Set rst = Me.Recordsetclone
    Do While rst.Fields("DeinDatum") = Me!DeinDatum
        rst.MoveNext
    Loop
    Me.Bookmark = rst.Bookmark
rst.close: Set rst = Nothing
End Sub

gruss ekkehard
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Thors1204 am November 28, 2016, 12:53:06
Hallo,

und besten Dank für Eure Tipps und Vorgehensweisen.

Mit "Button erstellen"...., meint Ihr damit eine Schaltfläche?
Um den Code einzugeben ändere ich bei "Beim Klicken" den Eintrag auf "Ereignisprozedur" und öffne mit einem weiteren Klick auf die 3 Punkte den VBA-Editor..., ist das von der Vorgehensweise so korrekt?

Gruß,
Thorsten
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Beaker s.a. am November 28, 2016, 13:05:58
Ja.
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Thors1204 am November 28, 2016, 13:10:32
KNALLER!  :D Funktioniert einwandfrei, vielen Dank!
Also jedenfalls nach vorne. Was ist für die Rückwärts-Sping-Funktion zu ändern?
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Beaker s.a. am November 28, 2016, 13:21:28
Hallo Thorsten,
Freut mich. Mir ist aber gerade noch was aufgefallen, wobei ich mir nicht sicher bin,
ob es evtl. nötig ist (blaue Zeile):
ZitatDim rst as DAO.Recordset
    Set rst = Me.Recordsetclone
    rst.Bookmark = Me.Bookmark
    Do While rst.Fields("DeinDatum") = Me!DeinDatum
        rst.MoveNext
    Loop
    Me.Bookmark = rst.Bookmark
rst.close: Set rst = Nothing
Habe es halt nicht getestet und bin mir nicht sicher, wo der DS-Zeiger nach Set rst = ...
steht. Musst du mal mit verschiedenen Einstiegspunkten (DS) testen.
gruss ekkehard
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Thors1204 am November 28, 2016, 13:25:45
Ja, Du hast Recht. Das macht es noch etwas besser ;)
Vielen Dank geht jetzt in beide Richtungen, TOP!

Gruß,
Thorsten
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: ebs17 am November 28, 2016, 13:36:33
' vorwärts
Me.Recordset.FindFirst "Datumsfeld = " & _
        Format(DateAdd("dd", 1, Me.txtDatumsfeld), "\#yyyy\-mm\-dd\#")


Für rückwärts dann -1 statt 1.
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Thors1204 am November 28, 2016, 13:48:05
Ich danke Euch allen für die guten Tipps und Codes!
Funktioniert alles tadellos :)

Gruß,
Thorsten
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Beaker s.a. am November 28, 2016, 14:56:29
Hallo Eberhard,
Da ich diese Idee mit dem Tageweise blättern irgendwie ganz nützlich finde, habe
ich mich hingesetzt um die Prozedur zu parametrisieren und somit für mehrere
Formulare verfügbar zu machen. Dies ist dabei heraus gekommen:
Public Sub TageweiseBlaettern( _
                            ByRef frm As Form, _
                            ByRef ctl As Control, _
                            Optional ByVal VorZurueck As Boolean = True)
'True für "vorwärts" - False = "rückwärts"
On Error GoTo Fehler
    Dim fld As String
    Dim rst As DAO.Recordset
    Set rst = frm.RecordsetClone
    fld = ctl.ControlSource
    rst.Bookmark = frm.Bookmark
    Do While Int(rst.Fields(fld)) = Int(ctl.Value)
'int() schneidet einen evtl. vorhandenen Zeitanteil ab
        If VorZurueck = True Then
            rst.MoveNext
        Else
            rst.MovePrevious
        End If
    Loop
    frm.Bookmark = rst.Bookmark
Ende_CleanUp:
    On Error Resume Next
    rst.Close: Set rst = Nothing
    Exit Sub
Fehler:
    If rst.BOF Or rst.BOF then Goto Ende_Cleanup
    'ansonsten Behandlung wie nötig/gewünscht/passend
End Sub

(hoffentlich sind da jetzt keine Copy&Paste-Fehler drin).
Bevor ich jetzt posten konnte, habe ich deine Lösung gesehen, und (natürlich ;))
gleich mal wieder gedacht "Ja, die Profis machen da mal schnell 'nen Einzeiler draus".
Beim genauen Hinsehen denke ich aber, dass das nur den genau nächsten Tag anzeigt
(Datum +/- 1), nicht aber einfach nur den nächsten Tag in der Zukunft/Vergangenheit.
Sehe ich das richtig?
gruss ekkehard
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: ebs17 am November 28, 2016, 16:10:33
Wenn das Datumsfeld selber einen Zeitanteil enthält, müsste man das zusätzlich berücksichtigen, aber auch schon in der Aufgabenstellung - könnte ja sein, man möchte auf eine bestimmte Zeit (Mittag) orientieren.

Übrigens: MovePrevious/MoveNext setzt eine entsprechende Sortierung voraus, FindNext würd auch in einer andersartigen Sortierung einen Treffer landen, wenn es einen gibt (Prüfen mit NoMatch).

In Deinem Code kommt nach meinem Gefühl die Fehlerbehandlung (Prüfung auf BOF/EOF) zu spät.
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Beaker s.a. am November 28, 2016, 16:51:12
Hallo Eberhard,
Alle Einwände akzeptiert.
Bezügl. Prüfung, die hatte ich vergessen, und dann vor dem Versenden noch schnell
so reingefrickelt. Ist klar, sollte vorher geprüft werden (Fehlervermeidung).
Aber
Zitateinen Treffer landen
welchen, wenn der Abstand > 1 ist? Den nächsten verfügbaren? (EOF aussen vor)
gruss ekkehard
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: ebs17 am November 28, 2016, 17:21:58
Wenn man im Kriterium auf Gleichheit prüft, erwartet man das auch im Ergebnis und nichts anderes. Man könnte aber auch auf >= prüfen, was insbesondere bei Zeitanteilen Sinn macht.
Titel: Re: Tageweise durch Datensätze springen
Beitrag von: Beaker s.a. am November 28, 2016, 17:29:34
Hallo Eberhard,
Grrrr  >:(
Zu einfach um drauf zu kommen, - ich hasse mich  ;)
gruss ekkehard