April 18, 2021, 01:30:53

Neuigkeiten:

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


Datumsfeld in Tabelle jeweils in neuer Zeile

Begonnen von BikeArno, April 08, 2021, 09:30:42

⏪ vorheriges - nächstes ⏩

BikeArno

Hallo,

mich beschäftigt gerade Folgendes: Ich möchte gerne das Datum für ein bestimmtes Ereignis über meine Datenbank dokumentieren (z.B. Aktualisierung einer Datenquelle). Hierfür habe ich mir eine Tabelle mit dem Datumsfeld und einen Button im Formular erstellt. Immer wenn ich den Button betätige, soll das Datum in der Tabelle dokumentiert werden, und zwar jeweils in einer neuen Zeile. Aktuell wird immer das vorher gespeicherte Datum überschrieben. Ich nutze folgenden Code:

Private Sub ADatum_Click()
Me!Aktualisierung = Date
End Sub

Wie bekomme ich es hin, dass das Datum per Buttoncklick immer in einer neuen Zeile der Tabelle tabDate gespeichert wird?

Danke



DF6GL

Hallo,

was genau willst Du erreichen?

Soll das eine Art Historie für Änderungen an einer oder mehreren Tabellen (, bzw. deren Datensätzen) ergeben oder soll lediglich das Datum der Änderung in genau diesem Datensatz hinterlegt werden?





BikeArno

Zitat von: DF6GL am April 08, 2021, 10:10:03was genau willst Du erreichen?

Hallo,

es geht um einen recht einfachen Mechanismus: Vereinfacht gesagt soll immer nach Betätigung der Schaltfläche in der Tabelle ein Datumswert in einer neuen Zeile eingetragen werden.

Gruß 

steffen0815

Hallo,
ZitatWie bekomme ich es hin, dass das Datum per Buttoncklick immer in einer neuen Zeile der Tabelle tabDate gespeichert wird?
1) Anfügeabfrage
2) Recordset (addnew)
Gruß Steffen

DF6GL

Hallo,


Zitatrecht einfachen Mechanismus

?? ??

Es ergibt also eine Tabelle (Wie heißt die?),  in der Datensätze mit nur je einem Datumswert enthalten sind?

Was machst Du dann damit?



BikeArno

Zitat von: DF6GL am April 08, 2021, 13:50:02Es ergibt also eine Tabelle (Wie heißt die?), 

Hallo,

die Tabelle heisst "tabDate" (siehe Eingangspost). Sie dient lediglich der Dokumentation, wann eine bestimmte Aufgabe erledigt wurde. Es wird nichts berechnet oder so; es müssen lediglich Datumsangaben festgehalten werden.


Maxel

Ich denke, Du kannst Franz' Zweifel an der Sinnhaftigkeit einer Tabelle mit nur einer Spalte (Datum) nicht nachvollziehen...
Gruß
Maxel

DF6GL

Hallo,

ZitatSie dient lediglich der Dokumentation, wann eine bestimmte Aufgabe erledigt wurde.



Ok, und wo ist die Zuordnung zu den bestimmten Aufgaben??


Das ist keine Dokumentation, nur ein Zettel mit aussagelosen Datumswerten. Da kann ich gleich einen leeren Kalender hernehmen und behaupten, das seien meine Tätigkeiten gewesen..  8)

BikeArno

Zitat von: DF6GL am April 08, 2021, 19:41:50Hallo,

ZitatSie dient lediglich der Dokumentation, wann eine bestimmte Aufgabe erledigt wurde.



Ok, und wo ist die Zuordnung zu den bestimmten Aufgaben??


Das ist keine Dokumentation, nur ein Zettel mit aussagelosen Datumswerten. Da kann ich gleich einen leeren Kalender hernehmen und behaupten, das seien meine Tätigkeiten gewesen..  8)


Da gebe ich dir recht, Dokumentation ist "übertrieben - ich bitte auch um Nachsicht, da ich mich noch in Access einarbeite. Aber nochmal zum Hintergrund: Es gibt (1) eine Person, die regelmäßig Datenaktualisierungen vornimmt. Dies erfolgt in diesem Fall über Lösch/Aktualisierung/Anfügeabfragen, die über einen Button gesteuert werden. Aus Gründen der Einfachheit wollte ich einen weiteren Button/Schaltfläche ins Formular setzen, der 1) das Datum der letzten Aktualisierung im Formular anzeigt und 2) dieses in der Tabelle festhält. Da nur eine Person dafür verantwortlich ist, fand ich dieses "händische" Vorgehen legitim. Ziel ist, im Formular das Datum der letzten Aktualaisierung abzubilden und im Längsschnitt soll darstellbar sein, in welchen Abständen die Aktualisierung stattfand.

Ich fand das Vorgehen besser, als lediglich händische Notizen "auf einem Zettel" anzufertigen. Sicherlich könnte man das auch direkt mit der Schaltfläche für o.g. Abfragen verbinden.

Gruß

Maxel

 Etwa so:

   Sub InsertIntoDate()
     
        CurrentDB.Execute "INSERT INTO DeineTabelle " _
            & "(DeinDatumsfeld) VALUES " _
            & "(Date())", dbfailonerror     
     
    End Sub
Gruß
Maxel

DF6GL

April 09, 2021, 13:34:21 #10 Letzte Bearbeitung: April 09, 2021, 13:55:31 von DF6GL
Hallo,

Zitatich bitte auch um Nachsicht

übe ich ja schon ... ;)  :D

ZitatDies erfolgt in diesem Fall über Lösch/Aktualisierung/Anfügeabfragen, die über einen Button gesteuert werden

Warum verwendetest Du nicht ein gebundenes Formular?  Dann kann ganz einfach ein DS geändert, angefügt und gelöscht werden. Gleichzeitig kann dann im Form_BeforeUpdate-Ereignis das aktuelle Datum in ein Datum/Uhrzeit-Tabellenfeld ("LetzteÄnderungAm" eingesetzt werden.  Beim Löschen eines DS macht das allerdings keinen Sinn, denn was weg ist, ist weg.. 8) .


ZitatZiel ist, im Formular das Datum der letzten Aktualaisierung abzubilden

Es wird nicht im Formular "abgebildet", das aktuelle Datum wird in der Tabelle abgelegt und vom Formular wie jedes andere Tabellenfeld bei einem gebundenen Formular datenmäßig in einem Steuerelement angezeigt.

Zitatund im Längsschnitt soll darstellbar sein, in welchen Abständen die Aktualisierung stattfand.

Hier sprichst Du aber eine ganz andere Vorgabe an. Es handelt sich hierbei um eine "Änderungshistorie", bei der jede Änderung/Löschung bezüglich des/der betroffenen Tabellenfelder einschließlich des aktuellen Datums und evtl. des aktuellen Users in einer Log-Tabelle erfasst wird.

Sowas nennt sich "Audittrail" und ist u. a. im DBWiki (siehe u. st. Link) zu finden. 

https://web.archive.org/web/20170302102246/http://dbwiki.net/images/2/2c/AccSampleAuditTrail.zip



Die einfachste Version wäre eine Tabelle:

tblHistorie

HistID (Autowert)
Hist_DSID  (Long)    enthält die ID des geänderten DS
Hist_Tab   (Text)    enthält den Tabellennamen
Hist_Datum  (Datum/Uhrzeit)   enthält das Änderungsdatum
Hist_User   (Text)   enthält den Usernamen
Hist_Status (Long)   enthält  die ID der Maßnahme, 1: Änderung, 2: Löschung, 3: Neuer DS


Bearbeitung der Tabelle im Form_Afterupdate-Ereignis bzw. im "Form_Delete"-Ereignis.



ZitatIch fand das Vorgehen besser, als lediglich händische Notizen "auf einem Zettel" anzufertigen. Sicherlich könnte man das auch direkt mit der Schaltfläche für o.g. Abfragen verbinden.

Da stimme ich zu.  Nur mach es richtig....

BikeArno

Zitat von: Maxel am April 09, 2021, 11:29:55Etwa so:

   Sub InsertIntoDate()
    
        CurrentDB.Execute "INSERT INTO DeineTabelle " _
            & "(DeinDatumsfeld) VALUES " _
            & "(Date())", dbfailonerror    
    
    End Sub

Hallo Max, Klasse, vielen Dank für diesen Vorschlag, welcher genau die o.g. Anforderungen erfüllt.