Beim öffnen zum zuletzt geänderten Datensatz springen
Ich möchte das beim Öffnen meines Formulars automatisch zum zuletzt geänderten Datensatz gesprungen wird.
Hallo liebes Forum
Ich habe ein Formular "Formular Produkteingabe". Ausserdem habe ich ein Feld "DatumAenderung" in dem das Datum der letzten Änderung eines Datensatzes gespeichert wird. Nun speichere ich meinen Datensatz, und schliesse das Formular.
Wie kann ich das nun bewerkstelligen das beim erneutem öffnen des Formulars zum Datensatz gesprungen wird, der den höchsten Wert in "DatumAenderung" hat. Also der Datensatz der zuletzt geändert wurde?
MfG Valume
Hallo liebes Forum
Ich habe ein Formular "Formular Produkteingabe". Ausserdem habe ich ein Feld "DatumAenderung" in dem das Datum der letzten Änderung eines Datensatzes gespeichert wird. Nun speichere ich meinen Datensatz, und schliesse das Formular.
Wie kann ich das nun bewerkstelligen das beim erneutem öffnen des Formulars zum Datensatz gesprungen wird, der den höchsten Wert in "DatumAenderung" hat. Also der Datensatz der zuletzt geändert wurde?
MfG Valume
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117299
Url: https://administrator.de/contentid/117299
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
8 Kommentare
Neuester Kommentar
Hi Valume,
mit VBA geht das ganz einfach, leider schreibst du nicht, mit welcher Access-Version du arbeitest. Auch nicht ob du DAO oder ADO verwendest
Hier mal eine Anleitung:
- mit DMAX den Datensatz finden, der zuletzt geändert wurde
- die ID speichern(merken)
- einen Recordset (Kopie) öffnen
- ID suchen
- Bookmark setzen
- Recordset schließen
- Bookmark anwenden
Gruß
Wolfgang
(Netwolf)
mit VBA geht das ganz einfach, leider schreibst du nicht, mit welcher Access-Version du arbeitest. Auch nicht ob du DAO oder ADO verwendest
Hier mal eine Anleitung:
- mit DMAX den Datensatz finden, der zuletzt geändert wurde
- die ID speichern(merken)
- einen Recordset (Kopie) öffnen
- ID suchen
- Bookmark setzen
- Recordset schließen
- Bookmark anwenden
Gruß
Wolfgang
(Netwolf)
Guten Morgen, bin auch wieder da.
Hier ein schlichtes Code-Beispiel (auf DAO basierend, ggf. ist im Visual-Basic-Editor unter "Extras-Verweise" die DAO-Object-Library zu aktivieren).
In den Formulareigenschaften unter "Ereignis-Beim Öffnen" Ereignisprozedur anklicken, dann öffnet sich der VB-Editor. Dort zunächst, wie oben beschrieben, DAO aktivieren. Dann den vorhandenen Code wie folgt ergänzen:
Natürlich noch "Tabellenname" entsprechend anpassen.
Die Funktion SQLDate dient nur der Übersetzung des Datumsformates in das SQL-Format, welches für die Find-Funktion genutzt wird. Implizit wird vorausgesetzt, dass es nur ein maximales "DatumAenderung" gibt, auf jeden Fall wird mit der o.a. Methode der erste Tabelleneintrag gefunden, dessen DatumAenderung dem Maximum entspricht.
Ich habe jetzt mal das Datumsformat angenommen. Wenn es sich um eine Zahl oder ein Datum mit Uhrzeit (ja wahrscheinlich sinnvoller) handelt, ist der Suchstring query entsprechend anzupassen.
Das sollte es gewesen sein.
Viele Grüße
EDIT:
Hier noch ein Codebeispiel mit automatischem Setzen eines TimeStamps und entsprechender Anzeige, etwas einfacher, da die Datumsformatumwandlung entfällt:
Hier ein schlichtes Code-Beispiel (auf DAO basierend, ggf. ist im Visual-Basic-Editor unter "Extras-Verweise" die DAO-Object-Library zu aktivieren).
In den Formulareigenschaften unter "Ereignis-Beim Öffnen" Ereignisprozedur anklicken, dann öffnet sich der VB-Editor. Dort zunächst, wie oben beschrieben, DAO aktivieren. Dann den vorhandenen Code wie folgt ergänzen:
Option Compare Database
Private Function SQLDate(InDate As String) As String
Dim sDay, sMonth, sYear As String
Dim sDatVal As String
sDatVal = DateValue(InDate)
sDay = Day(sDatVal)
sMonth = Month(sDatVal)
sYear = Year(sDatVal)
SQLDate = "#" & sMonth & "/" & sDay & "/" & sYear & "#"
End Function
Private Sub Form_Open(Cancel As Integer)
Dim rst As DAO.Recordset
Dim query As String
Set rst = Me.Recordset
query = "DatumAenderung=" & SQLDate(DMax("[DatumAenderung]", "Tabellenname"))
rst.MoveFirst
rst.FindFirst (query)
End Sub
Natürlich noch "Tabellenname" entsprechend anpassen.
Die Funktion SQLDate dient nur der Übersetzung des Datumsformates in das SQL-Format, welches für die Find-Funktion genutzt wird. Implizit wird vorausgesetzt, dass es nur ein maximales "DatumAenderung" gibt, auf jeden Fall wird mit der o.a. Methode der erste Tabelleneintrag gefunden, dessen DatumAenderung dem Maximum entspricht.
Ich habe jetzt mal das Datumsformat angenommen. Wenn es sich um eine Zahl oder ein Datum mit Uhrzeit (ja wahrscheinlich sinnvoller) handelt, ist der Suchstring query entsprechend anzupassen.
Das sollte es gewesen sein.
Viele Grüße
EDIT:
Hier noch ein Codebeispiel mit automatischem Setzen eines TimeStamps und entsprechender Anzeige, etwas einfacher, da die Datumsformatumwandlung entfällt:
Option Compare Database
Private Sub Form_Open(Cancel As Integer)
Dim rst As DAO.Recordset
Dim query As String
Set rst = Me.Recordset
query = "DatumAenderung=" & Replace(DMax("[DatumAenderung]", "Tabellenname"), ",", ".")
rst.MoveFirst
rst.FindFirst (query)
End Sub
Private Sub Test_Dirty(Cancel As Integer)
Me.DatumAenderung = Now()
End Sub
Hallo,
1. DAO sollte bei Access 2003 dabei sein. Wenn es in der Extras-Verweise-Liste nicht angezeigt wird, ist ggf. die DLL nicht richtig registriert. Suche einmal die dao360.dll (ggf. auf der Office-CD, dann auf die Platte kopieren)und führe dann auf der Kommandozeile
aus.
2. Hier eine angepasste SQLDate-Funktion für das Format mit Datum und Uhrzeit, Beispiel 1 sollte damit laufen.
3. Option Compare Database sorgt für eine der Ländereinstellung der DB angepasste Sortierreihenfolge, für unser Beispiel unerheblich, taucht im VB-Editor aber automatisch auf.
P.S.:
Programmierung ginge sicherlich "eleganter", der Code sollte aber möglichst selbsterklärend sein.
1. DAO sollte bei Access 2003 dabei sein. Wenn es in der Extras-Verweise-Liste nicht angezeigt wird, ist ggf. die DLL nicht richtig registriert. Suche einmal die dao360.dll (ggf. auf der Office-CD, dann auf die Platte kopieren)und führe dann auf der Kommandozeile
regsvr32.exe C:/Pfad/Zur/dao360.dll
aus.
2. Hier eine angepasste SQLDate-Funktion für das Format mit Datum und Uhrzeit, Beispiel 1 sollte damit laufen.
Private Function SQLDate(InDate As String) As String
Dim sDay, sMonth, sYear As String
Dim ZeitFormat As String
Dim sDatVal As String
sDatVal = InDate
sDay = Day(sDatVal)
sMonth = Month(sDatVal)
sYear = Year(sDatVal)
ZeitFormat = "hh:nn:ss"
SQLDate = "#" & sMonth & "/" & sDay & "/" & sYear & " " & Format(sDatVal, ZeitFormat) & "#"
End Function
3. Option Compare Database sorgt für eine der Ländereinstellung der DB angepasste Sortierreihenfolge, für unser Beispiel unerheblich, taucht im VB-Editor aber automatisch auf.
P.S.:
Programmierung ginge sicherlich "eleganter", der Code sollte aber möglichst selbsterklärend sein.