Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datum der letzten Änderung

Begonnen von accessy, Februar 24, 2014, 18:07:27

⏪ vorheriges - nächstes ⏩

accessy

Ich würde gern beim Öffnen der DB in meinem Formular das Datum der letzten Änderung sehen.
Das heißt, ich öffne die DB, und sehe z.B. in der TextBox, oder Label den 19.02.2014.
Ich blättere rum, ich öffne sämtliche Unterformulare, aber ich lese überall nur und trage nichts ein.
Ich schließe die DB und der 19.02.2014 bleibt erhalten.

Aber sobald ich etwas verändere, irgendeinen Eintrag mache, muss das Datum aktualisiert werden auf HEUTE.

Gibt es dafür bereits eine fertige VBA Lösung?
Ich frage es deshalb, weil ich denke, dass so etwas bestimmt viele User haben.
Merkwürdig ist nur, dass ich in der Suche nichts finden kann.

DF6GL

Hallo,

naja "fertig"...  für sowas reicht ein Einzeiler..
In jedem Formular, das Datenänderung zulässt, schreibst Du in dessen BeforeUpdate-Ereignisprozedur:


Sub Form_BeforeUpdate(Cancel as Integer)
Me!AenderungsDatum = Now()   ' oder = Date  , wenn das Datum ohne Uhrzeit genügt
End Sub
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

bahasu

Sofern Du ein Formular nutzt, ist das Ereignis "Vor Aktualisierung" verwendbar:

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

Harald
Servus

accessy

#3
Moment...Ich komme nicht ganz mit.
Der Haken ist folgender:
Ich habe 13 Formulare.
Und ich kann in allen das BeforeUpdate einbauen.
Aber angezeigt werden soll es nur in einer einzigen TextBox in meinem Hauptformular.
Annahme im Hauptformular "KUNDEN" habe ich die TextBox mit Namen "LastChange".
Dann muss sich diese und nur diese TextBox auch dann ändern, wenn sich in einer Tabelle etwas ändert, die mit diesem Hauptformular gar nichts zu tun hat.

accessy

Nachtrag. Ich krieg das nicht gebacken.
Mein Feld ist immer leer.
Vor allem müsste ja das Datum beim Öffnen zu sehen sein... Auch nicht....alles leer.

Ich glaube, so einfach geht das nicht....



bahasu

Hi,

Zitat von: accessy am Februar 24, 2014, 18:47:38
Ich krieg das nicht gebacken.

kannst Du eine db mit Spieldaten im a2003 Format als Zip-Datei zur verfügung stellen?

Harald
Servus

DF6GL

Hallo,

ZitatAnnahme im Hauptformular "KUNDEN" habe ich die TextBox mit Namen "LastChange".
Dann muss sich diese und nur diese TextBox auch dann ändern, wenn sich in einer Tabelle etwas ändert, die mit diesem Hauptformular gar nichts zu tun hat.

Kannst Du diese Logik etwas näher erklären?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

accessy

Das muss ich auch so hinbekommen, ohne Hochladen.
So, das habe ich jetzt erstmal gemacht.
Im Formular KUNDEN gibt es jetzt das Feld "Last_Change"
Im VBA steht jetzt

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


Ich öffne mein Formular.
Das Feld ist leer. Okay, gab ja auch keine Änderung.
Ich ändere einen DS und plötzlich erscheint das heutige Datum. Bis hierher alles Richtig !!
Nun blättere ich einen DS weiter und das Feld ist wieder leer.... Und das ist Falsch !!

Das bedeutet, ich habe eine Änderungsanzeige im Feld "Last_Change" für einen geänderten DS. Das ist aber nicht mein Ziel.
Dieses Feld muss jetzt nach dieser Änderung eines DS sein Datum von JETZT, also HEUTE behalten, auch wenn ich weiter blättere.
Ich will, dass sich das Datum sofort ändert, sobald ich irgendwas an der DB verändere.
Der DS ist doch nur ein Element der ganzen DB.

bahasu

Hi,

kann es sein, dass das Feld an die Tabelle gebunden ist?
Wenn ja, was passiert, wenn Du ein ungebundenes verwendest?

Zuvor hatte ich das so verstanden, Du hast ein Hauptformular und eine Reihe von Unterformularen. Wenn dort etwas geändet wird, soll im Hauptformular das Datum erscheinen. Ist diese Vorstellung richtig oder falsch?

Harald
Servus

accessy

#9
Mist, das hatte ich vergessen zu erwähnen.
Das Feld "Last_Change" hatte in die Tabelle Kunden eingebaut,
dann in die Abfrage zugefügt, die als Grundlage der Datenherkunft dient.

Jetzt habe ich das Feld in der Tabelle Kunden wieder gelöscht. Nun ist es ungebunden.
Aber jetzt steht in dem Feld "#Name?"

Ändere ich etwas, kommt die Fehlermeldung "Sie können dem Objekt keinen Wert zuweisen"

Was nu?

Uii, Fehler gefunden. Jetzt scheint es zu funktionieren.
Ich teste mal weiter, was passiert, wenn ich in anderen Formularen was ändere.

accessy

Okay, es funktioniert jetzt so, dass bei jeglichen Änderungen in einem Unterformular das Feld "Last_Change" im Hauptformular das Datum erhält.

Aber leider hat die Sache noch einen Haken.
Das Datum wird nicht gespeichert.

Schließe ich die DB und öffne sie wieder, ist das Feld wieder leer.
Wo speichere ich dieses Datum, um beim nächsten Öffnen zu sehen, wann die letzte Änderung gemacht wurde?


bahasu

Hi Achim,
Zitat von: accessy am Februar 24, 2014, 22:47:43
Wo speichere ich dieses Datum, um beim nächsten Öffnen zu sehen, wann die letzte Änderung gemacht wurde?

in einer Tabelle zum Beispiel mit dem Namen "tblLetzteAenderung", die an das Hauptformular gebunden ist oder, falls sie nicht angebunden sein soll, wo dann per dlookup der gewünschte Wert ermittelt wird.

Harald
Servus

accessy

Ich habe eine Tabelle mit Namen tbl_Last_Change erstellt.
In der befinden sich das Feld mit Namen Last_Change und das Feld ID.

Das Hauptformular KUNDEN bekommt seine Daten aus einer Abfrage, die allerdings die Tabelle tblKunden ist.

Gehe ich in die Abfrage, füge die Tabelle tblLast_Change hinzu und setze das Feld Last_Change mit ein, funktioniert die Abfrage nicht mehr. Abfrage ist dann leer.

Die Tabelle tblKunden bekomme ich nicht angezeigt als Datenherkunft für mein Hauptformular KUNDEN. Ist ja auch klar, denn in der Abfrage ist die Tabelle tblLast_Change nicht mit drin.
Also kann ich dem Feld Last_Change als Steuerelementinhalt keine Verknüpfung geben, weil dieses gar nicht erst mit aufgeführt wird.

Wie soll ich dem Steuerelementinhalt das Feld Last_Change geben, wenn ich es nicht in der Datenherkunft habe?

Und dieses dlookup habe ich überhaupt nicht kapiert.... Warum ist das alles bloß so kompliziert?

bahasu

Hi Achim,

im Anhang ein einfaches Beispiel für die ungebundene Variante mit dlookup:

Es gibt eine Tabelle, in der die Änderung gespeichert wird.
Auf diese Tabelle wird im Hauptformular (Formular0) mit dlookup zugegriffen (Ereignis: Beim Öffnen).
Wird im Unterformular (Formular1) etwas geändert, wird im Ereignis "Nach Aktualisierung" eine sql-Anweisung aufgerufen, die das Änderungsdatum in die Tabelle einträgt (in der Tabelle muss es bereits einen Datensatz geben: es wird ersetzt aber nicht angehängt) und per Me.parent... im Hauptformular anzeigt.

Hilft das vielleicht?

Harald
Servus

accessy

Hallo Harald,

so, ich habe mir dein Beispiel mal vorgenommen und eingebaut.
Der Reihe nach.
tblLast_Change erstellt mit Feldnamen Last_Change; ohne ID
Das Hauptformular KUNDEN hat das Feld mit Namen Geaendert_am drin und ist ungebunden.
Das Hauptformular KUNDEN hat den Code von dir
Zitat
Private Sub Form_Open(Cancel As Integer) 'Beim Öffnen des Formulars
   Me!Geaendert_am = DLookup("Last_Change", "tbl_Last_Change")
End Sub

Private Sub Form_AfterUpdate()
    CurrentDb.Execute "UPDATE tbl_Last_Change SET tbl_Last_Change.Last_Change = Now();"
    Me.Parent!Geaendert_am = DLookup("Last_Change", "tbl_Last_Change")
End Sub

Ich ändere etwas und schalte einen DS weiter.
Jetzt erhalte ich folgende Fehlermeldung 2452
Der von Ihnen eingegebene Ausdruck enthält einen ungültigen Verweis auf die Hauptobjekt-Eigenschaft (Parent)

Und im Debugger wird die Zeile Me!Parent..... markiert.
Hmmm.... was nu?