collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 46
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 3
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13799
  • stats Beiträge insgesamt: 63493
  • stats Themen insgesamt: 8604
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Veränderungen in Feldinhalten herausfinden  (Gelesen 144 mal)

Offline Striving_Tom

  • Newbie
  • Beiträge: 9
Veränderungen in Feldinhalten herausfinden
« am: Oktober 11, 2017, 17:43:56 »
Hallo Zusammen,

vielen Dank für eure Hilfe. Durch eure Antworten zu meiner vorangegangenen Anfrage ("Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden" - http://www.access-o-mania.de/forum/index.php?topic=22728.0 ) kann ich jetzt aus Abbildern von Datenbeständen, die zu verschieden Zeitpunkten erstellt wurden
  • die von der älteren zur aktuelleren Version neu hinzugekommenen Datensätze herausfiltern,
  • die von der älteren zur aktuelleren Version entfallenen Datensätze herausfiltern,
  • einen neuen Gesamtdatenbestand erzeugen, der die entfallenen Datensätze noch enthält. Diese entfallenen Datensätze werden im Gesamtdatenbestand aber als "gelöscht" markiert.
Eine weitere Problemstellung muss ich aber noch lösen:
Innerhalb von Datensätzen, die sowohl im "alten" als auch im "aktuellen" Abbild des Datenbestandes enthalten sind, kann es in einem oder mehreren der Felder zu Veränderungen kommen.
  • alt: "leer" --> neu: "Wert X"
  • alt: "Wert X --> neu: "Wert Y"
  • alt: "Wert X --> neu: "leer"
Genau diese Datensätze mit Veränderungen innerhalb von Feldern von einer Version zur nächsten möchte ich herausfiltern und dazu auch angezeigt bekommen, in welchem Feld sich Inhalte verändert haben. Möglicherweise ist dazu auch zu berücksichtigen, dass die Datensätze Textfelder und Zahlenfelder [Formate: Datum und Integer (long integer) enthalten?

Alternative A (Vielleicht ist dieses eine naive Vorstellung? ;)  ) :
Gibt es eine "einfache" SQL-Abfrage, die solche Datensätze mit Veränderungen in den Feldern herausfiltert und dazu möglichst einfach/deutlich die Information liefert, in welchem Feld sich die Veränderung ergeben hat?
  • Angabe Datensatz-ID, möglichst Nachname, Vorname, Adresse und dazu Feldname mit der Veränderung?
  • Angabe Datensatz-ID, möglichst Angabe Nachname, Vorname, Adresse und dazu alle Felder, wobei jedoch alle unveränderten Felder leer bleiben und nur die Felder mit Veränderungen den neuen Feldinhalt darstellen? (Bei Löschungen von Feldinhalten sollte dort dann jedoch "NULL" und/oder "LZ / LEERE ZEICHENKETTE" stehen ...)

Alternative B
Ich fürchte jedoch, dass die "einfache" Alternative nicht zum Tragen kommt. :( Ist meine Vermutung richtig, dass eine SQL-Abfrage aller Datensätze mit Veränderungen in den Datenfeldern explizit alle zu vergleichenden Felder enthalten muss und darüber hinaus auch noch Feldformate und die Fälle "NULL" [ggfs. auch den Zahlenwert "0"] und "" d.h. "leere Zeichenkette" berücksichtigen muss? Wie sollte dann die Grundstruktur einer solchen Abfrage aussehen?

Viele Grüße
Thommy
 

Offline Striving_Tom

  • Newbie
  • Beiträge: 9
Re: Veränderungen in Feldinhalten herausfinden
« Antwort #1 am: Oktober 11, 2017, 19:30:57 »
Hallo zusammen,

für die umständliche Alternative habe ich wohl ein Vorgehen gefunden und werde es morgen mal posten. Aber vielleicht geht es ja auch noch einfacher ... ?

Gruß
Thommy
 

Offline Striving_Tom

  • Newbie
  • Beiträge: 9
Re: Veränderungen in Feldinhalten herausfinden
« Antwort #2 am: Oktober 12, 2017, 18:26:28 »
Hallo zusammen,

wie angekündigt, ist hier meine Lösung für die beschriebene Problemstellung anhand eines fiktiven Datenbeispiels. Vielleicht hilft dieser Ansatz anderen Interessierten auch weiter. 

Alter Datenbestand (Tab_alt) :
ID   Nachname   Vorname   Einsatz
11   Meier      Tina      02.12.2017
12   Müller   Martin   
13   Lehmann   Torsten   09.12.2017
14   Schulze   Hermann   
15   Schmidt   Marc      02.12.2017
16   Becker   Mia   

Neuer Datenbestand (Tab_neu):
ID   Nachname      Vorname   Einsatz
11   Meier         Tina   
13   Lehmann      Torsten   02.12.2017
14   Schulze      Hermann   
15   Schmidt      Marc      09.12.2017
16   Zimmermann   Mia      02.12.2017
17   Glaser      Simon   

In den Datensätzen, die in beiden Datenbeständen vorkommen (11, 13, 14, 15, 16), gibt es folgende Veränderungen:
  • eine Namensänderung (16) [z.B. durch Heirat/Scheidung]
  • zwei Datumsänderungen(13, 15)
  • ein weggefallenes Datum (11)
  • ein hinzugekommenes Datum (16)

Mit folgendem Code erhalte ich alle Veränderungen innerhalb der Datensätze, die in beiden Datenbeständen vorkommen. (Zu neuen/weggefallenen Datensätzen s. meinen anderen Post, auf den ich im ersten Beitrag dieses Threads verwiesen habe):
SELECT Tab_alt.ID,
IIF (Tab_alt.Nachname <> Tab_neu.Nachname, "alt: " & Tab_alt.Nachname & "  neu: " & Tab_neu.Nachname, "") AS Nachname,
IIF (
        (Tab_alt.Einsatz <> Tab_neu.Einsatz)
        OR
        (Tab_alt.Einsatz IS NULL AND Tab_neu.Einsatz IS NOT NULL )
        OR
        (Tab_alt.Einsatz IS NOT NULL AND Tab_neu.Einsatz IS NULL),  "alt: " & Tab_alt.Einsatz & "  neu: " & Tab_neu.Einsatz, "") AS Einsatz
FROM Tab_neu INNER JOIN Tab_alt ON Tab_neu.ID = Tab_alt.ID
WHERE ( (Tab_alt.Nachname <> Tab_neu.Nachname)
      OR ( (Tab_alt.Einsatz <> Tab_neu.Einsatz) OR (Tab_alt.Einsatz IS NULL AND Tab_neu.Einsatz IS NOT NULL ) OR (Tab_alt.Einsatz IS NOT NULL AND Tab_neu.Einsatz IS NULL) )   )
;

Ich vermute mal, dass es keine "elegantere" und vor allem wesentlich kürzere Alternative gibt? ...

Viele Grüße
Thommy