Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: seppi am März 25, 2015, 10:42:25

Titel: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: seppi am März 25, 2015, 10:42:25
Hallo

Ich arbeite mit Ac2010 und VBA.

Ich möchte in einer Artikelverwaltung die Datensatzänderungen protokollieren. In einem Formular kann ich das mit oben erwähntem Programm TM-Änderungsprotokoll machen.

Diese Protokollierung greift aber nicht, wenn ich Daten einlese bzw. update.

Kann mir jemand eine Tipp geben, wie ich das umsetzen kann?

Danke, Seppi
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: Wurliwurm am März 25, 2015, 10:54:09
Ich wüßte jetzt nicht, wie das gehen sollte. Nimm ein Datenbanksystem, da kann das (revisionssicher) eingebaut werden. Stichwort: Trigger
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: el_gomero am März 25, 2015, 10:57:34
Hallo,

ab A10 gibt es die Datenmakros, die sind mit Triggern vergleichbar.


https://support.office.com/de-de/article/Erstellen-eines-Datenmakros-b1b94bca-4f17-47ad-a66d-f296ef834200
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: seppi am März 26, 2015, 09:58:21
Danke für die Anregung.

Ich habe mir ein Video von Lorenz Hölscher zum Thema Makro reingezogen. Sehr Interessant.
Ich konnte mir aber kein Makro erstellen, das ein Änderungs-Protokoll einzelner Spalten schreibt.

Kannst du/jemand mir helfen? Mit einem Beispiel oder einem Link?

Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: DF6GL am März 26, 2015, 10:51:19
Hallo,

vielleicht solltest Du erklären, was hier genau gemacht wird:

Zitat... wenn ich Daten einlese bzw. update.
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: el_gomero am März 26, 2015, 12:03:46
Moin,

Zitat
Ich habe mir ein Video von Lorenz Hölscher zum Thema Makro reingezogen. Sehr Interessant.
Ich konnte mir aber kein Makro erstellen, das ein Änderungs-Protokoll einzelner Spalten schreibt.

Kannst du/jemand mir helfen? Mit einem Beispiel oder einem Link?

1. habe ich von DATENMAKRO und nicht von Makro gesprochen und 2. steht oben bereits ein link  ::)
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: seppi am April 02, 2015, 13:12:32
Danke dem Beitrag
Datenmakro für Änderungen funktioniert, bis auf ....
konnte ich mein Problem lösen (hoffentlich).

Dank an alle.
Seppi

Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: seppi am April 04, 2015, 17:13:49
Ich stehe wieder an:

Ich möchte einen Datensatz aktualisieren und Änderungen in den Feldern tblArtikelNeu.artName und tblArtikelNeu.artRdvpr protokollieren. Protokolldatei ist tblZugriff.

Das geht auch wunderschön - wenn ich nur ein Feld ändere!

Das Problem ist, dass nur die letzte Änderung protokolliert wird:
- wenn ich artName und dann artRdvpe ändere, wird artRdvpe protoklliert
- wenn ich artRdvpe und dann artName ändere, wird artName protokolliert

Mein Datenmakro (verkürzt):
Wenn Aktualisiert("artName") Oder Aktualisiert("artRdvpe")
   Datensatz erstellen in tblZugriff
      Festlegen Feld: Name = tblZugriff.zugDatum
                            Wert = jetzt()
      Festelegen Feld .... weitere allgemeine Felder

      Wenn Aktualisiert("artName")
          Festlegen Feld: Name = tblZugriff.zugFeld
                                  Wert = "artName"
          Festlegen Feld: Name = tblZugriff.zugWertAlt
                                Wert = [alt].[artName]
          Festlegen Feld: Name = tblZugriff.zugWertNeu
                                Wert = [tblArtikelNeu].[artName]
      Wenn Aktualisiert("artRdvpe")
          Festlegen Feld: Name = tblZugriff.zugFeld
                                  Wert = "artRdvpe"
          Festlegen Feld: Name = tblZugriff.zugWertAlt
                                Wert = [alt].[artRdvpe]
          Festlegen Feld: Name = tblZugriff.zugWertNeu
                                Wert = [tblArtikelNeu].[artRdvpe]

Das geht so nicht. Wie müsste ich das angehen?

Gruss, Seppi


Könnt ihr das lesen?
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application"><DataMacro Event="AfterUpdate"><Statements><ConditionalBlock><If><Condition>Updated("artRdvpe") Or Updated("artName")</Condition><Statements><Comment>Die Felder artRdvpe und artName ... sollen protokolliert werden</Comment><CreateRecord><Data><Reference>tblZugriff</Reference></Data><Statements><Comment>Zuerst die allgemeinen Infos protokollieren, wie Tabelle, Datum, User</Comment><Action Name="SetField"><Argument Name="Field">tblZugriff.zugRecID</Argument><Argument Name="Value">[tblArtikelNeu].[artID]</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugTabelle</Argument><Argument Name="Value">"tblArtikelNeu"</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugDatum</Argument><Argument Name="Value">=Now()</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugRecID</Argument><Argument Name="Value">[tblArtikelNeu].[artID]</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugUser</Argument><Argument Name="Value">DB_Benutzer()</Argument></Action><Comment>Jetzt spezifische Felder protokollieren: Feldname und Key (ArtNummer...), Werte alt/neu</Comment><ConditionalBlock><If><Condition>Updated("tblArtikelNeu.artRdvpe")</Condition><Statements><Action Name="SetField"><Argument Name="Field">tblZugriff.zugFeld</Argument><Argument Name="Value">"artRdvpe"</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugKey</Argument><Argument Name="Value">[tblArtikelNeu].[artLiefNrID]</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugWertAlt</Argument><Argument Name="Value">[Old].[artRdvpe]</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugWertNeu</Argument><Argument Name="Value">[tblArtikelNeu].[artRdvpe]</Argument></Action></Statements></If></ConditionalBlock><ConditionalBlock><If><Condition>Updated("tblArtikelNeu.artName")</Condition><Statements><Action Name="SetField"><Argument Name="Field">tblZugriff.zugFeld</Argument><Argument Name="Value">"artName"</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugKey</Argument><Argument Name="Value">=[tblArtikelNeu].[artNummer] &amp; "Art-Nummer"</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugWertAlt</Argument><Argument Name="Value">[Old].[artName]</Argument></Action><Action Name="SetField"><Argument Name="Field">tblZugriff.zugWertNeu</Argument><Argument Name="Value">[tblArtikelNeu].[artName]</Argument></Action></Statements></If></ConditionalBlock></Statements></CreateRecord></Statements></If></ConditionalBlock></Statements></DataMacro></DataMacros>
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: DF6GL am April 04, 2015, 19:57:45
Hallo,

wozu der ganze Heckmeck?

Die Frage nach
Zitatwenn ich Daten einlese bzw. update.
hast Du noch nicht beantwortet.

Wenn dafür Aktions-Abfragen verwendet werden, kannst Du doch gleich die darin benutzten Daten in der Historien-Tabelle auch fortschreiben...


Manuell und direkt in Tabellen zu werkeln, muss "verboten" sein/werden.
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: seppi am April 05, 2015, 17:21:02
Hallo DF6GL

Auch eine Gruss vom Bodensee - Schweizerseite und nur über Ostern.

Ich vermittle Artikelstämme zwischen dem Grosshandel und den Detailisten. Der gesamt Artikelstamm ist ca. 50'000 Artikel stark. Ich möchte beim Updaten eines Artikelstamms nicht alle Artikel anschauen, sondern nur die 'wichtigsten'.

Der Artikelstamm wird gegen 50 Felder/Spalte haben. Einige Felder sind wichtiger als andere. Ich möchte protokolliert haben, wenn sich die Einkaufs-Verpackungseinheit ändert oder das Gewicht oder der Artikeltext oder der Preis (Preis-Tabelle) oder... Ich möchte aber nicht informiert werden, wenn sich der Warenbereich ändert oder der Lieferant oder der Mehrwertsteuer-Code.

Ich habe mal mit dem Änderungsprotokoll angefangen. Natürlich möchte ich auch über Neuanlagen informiert werden. Die nächste Herausforderung wird dann die Information über das Löschen sein. D.h., wenn ein Artikel vom Grosshändler nicht mehr geliefert wird, aber der Detailhändler den Artikel noch im Laden hat. 

Mein Protokoll (und Historie) soll die tblZugriff sein (Felder wie zugTabelle, zugFeld, zugKey, zugWertAlt, zugWertNeu, zugDatum, zugUser, zugRecID).

Wenn du einen besseren Weg kennst, lasse ich mich gerne belehren. So wie ich das aufgebaut habe, bzw. aufzubauen gedenke, ist es schreib-intensiv und fehleranfällig beim Programmieren.

Gruss, Seppi
Titel: Re: Protokollierung der Datensatzänderung (zB. TM-Änderungsprotokoll)
Beitrag von: DF6GL am April 05, 2015, 18:11:34
Hallo,

ZitatIch möchte beim Updaten eines Artikelstamms nicht alle Artikel anschauen, sondern nur die 'wichtigsten'.

WIE machst Du dieses Updaten??


Was die "wichtigsten" sind, kannst Du ja selber bestimmen, bzw. weißt die ja.

Wenn davon ausgegangen werden kann, dass  eine Tabelle (Artikelstamm) mit den Werten aus einer anderen Tabelle aktualisiert wird, so kann durch Verknüpfen der beiden Tabellen und Verwendung eines Kriteriums bei den interessierenden Spalten  eine passende Abfrage erstellt werden.

Luft-SQL:

Select * from Tabelle1 inner join Tabelle2 on Tabelle1.ArtikelNr = Tabelle2.ArtikelNr
Where Tabelle1.Feld1 <> Tabelle2.Feld1 or
Tabelle1.Feld3 <> Tabelle2.Feld3 .....