November 23, 2020, 16:58:43

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Access vor Schließen aktuelles Datum einsetzen

Begonnen von wolfgang b, November 20, 2020, 19:31:14

⏪ vorheriges - nächstes ⏩

wolfgang b

November 20, 2020, 19:31:14 Letzte Bearbeitung: November 20, 2020, 20:58:39 von MzKlMu
Guten Abend,
ich habe noch eine kleine Frage:
Was muss ich tun um das aktuelle Datum beim verlassen (oder halt kurz davor) in mein Textfeld (lastDate)
zu schreiben.
Diese VBA haben leider nicht funktioniert:

Private Sub Form_BeforeUpdate(Cancel As Integer)
  Me.lastDate = Now()
End Sub

Private Sub lastDate_BeforeUpdate(Cancel As Integer)
Me.lastDate = Now()
End Sub

Private Sub lastDate_Exit(Cancel As Integer)
    Me.lastDate = Now()
End Sub

mfg
wolfgang

DF6GL

Hallo,

warum willst Du das Datum in ein Textfeld schreiben, wenn das Form eh verlassen wird?

Oder soll das Datum nur dann an das aktuelle angepasst werden, wenn am Datensatz etwas (anderes) verändert wurde?

Nur dann tritt das Form_BeforeUpdate-Ereignis auf, vorausgesetzt das Form ist an eine Tabelle gebunden.


Wenn nicht an dann Daten geändert ist und das Form geschlossen wird, tritt nur (u. a.) das Form_Close-Ereignis auf.

Zudem wäre
Me!lastDate = Date
bei einem Datum ohne Uhrzeit besser gewählt.


wolfgang b

November 20, 2020, 19:58:05 #2 Letzte Bearbeitung: November 20, 2020, 20:09:31 von wolfgang b
Guten Abend Franz,
ja das Textfeld ist in einem Formular, welches geschlossen wird um mit einem
anderen Formular die Datenbank zu bearbeiten.
Das Datum soll natürlich in eine Tabelle geschrieben werden die zu dem Formular
gehört wo das Textfeld sich drauf befindet.

Hallo Franz,
in meiner Tabelle steht:
Name des Anwenders
Datum öffnen des Anwenders (klappt)
Datum schließen des Anwenders (klappt nicht)
Differenz schließen zu Öffnen   (um die Anwenderzeit festzuhalten)

mfg
wolfgang

MzKlMu

November 20, 2020, 20:20:37 #3 Letzte Bearbeitung: November 20, 2020, 20:25:39 von MzKlMu
Hallo,
Nimm das Ereignis "Beim Schließen". Und das Formularfeld muss natürlich auch an das entsprechende Tabellenfeld gebunden sein.
Die Differenz in die Tabelle zu schreiben ist überflüssig und falsch obendrein.
Die Differenz wird in einer Abfrage stets aktuell berechnet.
In die Tabelle gehört auch nicht der Name des Anwenders, sondern nur dessen Primärschlüssel als Fremdschlüssel.
Gruß
Klaus

wolfgang b

Hallo Klaus,
es funktioniert !
Private Sub Form_Unload(Cancel As Integer)
    Me.lastDate = Now
End Sub

Mein kleines Problem, wenn das Formular geschlossen wird, wird die Datum und Zeit hinterlegt.
Ich muss halt darauf achten das das Formular offen bleibt oder gibt es eine Möglichkeit
unabhängig ob Formulare oder oder Tabellen offen sind. Daher wenn also die Datenbank
geschlossen wird.

mfg
wolfgang

MzKlMu

Hallo,
Du kannst dafür sorgen, dass nur mit einem Button in einem bestimmten Formular es möglich ist die DB zu verlassen. Mit diesem Button schreibst Du dann lastDate.

Im Anhang ein Beispiel. Ist zwar zur Prüfung von Pflichtfeldern gedacht, aber die DB kann nur mit dem Button "Beenden" auf dem 1.Formular verlassen werden, egal was Du versuchst.
Gruß
Klaus

Xoar

Alternativ kann man beim Programmstart ein verstecktes Formular öffnen, was beim Schließen der DB natürlich automatisch geschlossen wird, wo dann der Code implementiert werden kann.

wolfgang b

Guten Morgen,
danke an Alle, werde mal sehen wie ich es durchführen kann,
schönes Wochenende

mfg
wolfgang

Beaker s.a.

Hallo Wolfgang,
ZitatMein kleines Problem, wenn das Formular geschlossen wird, wird die Datum und Zeit hinterlegt.
Ich muss halt darauf achten das das Formular offen bleibt
Was willst du denn überhaupt festhalten? Gelten die Felder für das
Formular/die DB oder für die enthaltenen DS?
Wenn du die Verweilzeit in einem Formular festhalten willst, brauchst
du eine eigene Tabelle mit Bezug zum Formular dafür. Dann kannst du
beim Öffnen per INSERT die Zeit festhalten und beim Schliessen per
UPDATE.
Wenn es für die ganze DB gelten soll ist Xoars Vorschlag mit dem
versteckten Form ein üblicher Lösungsweg.
Wenn die Felder in der DS-Herkunft des Forms enthalten sind, brauchst
du das Form nicht extra zu schliessen um die Endezeit zu speichern,
das machst du dann bereits bei "Form_BeforeUpdate".

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.