Hallo Herr Barz,
um nur, seit einem vorherigen Export, geänderte Datensätze zu verarbeiten ist etwas Vorarbeit notwendig. Das Problem ist, per Default fehlt ein Kennzeichen (Datum, JA/NEIN Feld, etc.) anhand Sie die geänderten Datensätze eindeutig identifizieren können.
Gut wäre wenn Ihre Anwendung, die die Daten ändert, in einem Feld protokolliert, dass was geändert wurde. Das kann z.B. ein JA/NEIN Feld sein, das lediglich angibt, dass der Datensatz geändert wurde oder aber ein Datumsfeld worüber protokolliert wird wann die letzte Änderung am Datensatz stattgefunden hat. Wenn das nicht gegeben ist, können Sie über
HASH Werte ermitteln ob sich Datensätze seit einem vorherigen Export geändert haben, das ist der komplizierteste Weg.
Hier mal kurz die Vorgehensweisen, im Anhang finden Sie 3 kleine Beispiel dazu inkl. einer
Access
Datenbank.
Nur geänderte Datensätze exportieren über ein Ja/Nein Feld)
Das ist der einfachste Fall. Wenn Ihre Anwendung bei einem Update ein zusätzliches JA/NEIN Feld z.B. [Geändert] auf JA bzw. TRUE setzt. Hier brauchen Sie auf der READ Seite in Ihrem SELECT lediglich
select * from [t_Tabelle2] where [Geändert] = true
angeben und es werden nur Datensätze exportiert die seit einem vorherigen Export geändert wurden. Am Ende der Verarbeitung müssen Sie das Feld natürlich wieder zurücksetzen, sonst werden beim nächsten Export diese Datensätze wieder verarbeitet. Das können Sie über eine
SQL Heater
am Ende der Verarbeitung über folgenden SQL Befehl erledigen.
update t_Tabelle2 set [Geändert] = false
So werden über ein zusätzliches JA/NEIN Feld nur Datensätze verarbeitet die geändert wurden, siehe Beispiel „geänderte-datensätze-über-ja-nein-feld.fhd“
Nur geänderte Datensätze exportieren über ein Datumsfeld [Letzte Änderung])
Hier wird es schon komplexer. Das Problem hier ist, Sie können nicht einfach auf einen statischen Wert abfragen, Sie benötigen ein Datum inkl. Uhrzeit wann Sie das letzte Mal Daten exportiert haben. Für diese Dynamik benötigen Sie einen
FlowHeater Parameter
, der den letzten Stand für einen nachfolgenden Export speichert. Hierzu müssen Sie lediglich in den Paramater Einstellungen die Option „Speichern“ aktivieren. So wird der aktuelle Inhalt nach dem Export in einer zusätzlichen Datei „Definitionsname.fhpara“ abgespeichert. Vor einem nächsten Lauf/Export werden die Parameter mit diesen Wert vorinitialisiert. Das ermöglicht Ihnen im SELECT auf der READ Seite folgend dymische SQL Abfrage.
select * from [t_Tabelle3] where [LetzteÄnderung] > #$DATUM$#
In der Definition müssen Sie noch sicherstellen, dass der Paramater $DATUM$ mit dem maximal letzten Datum gesetzt wird. Dazu verwenden Sie den
MAX Heater
zusammen mit
GET/SET Parameter Heater
, siehe Beispiel „geänderte-datensätze-über-datums-feld.fhd“.
Wichtig hier, das Datum sollte im Parameter als ISO Datum „yyyy-MM-dd HH:mm:ss“ formatiert werden!
Nur geänderte Datensätze exportieren über HASH Werte)
Jetzt wird es kompliziert

und leider auch langsam

Das Problem hier ist, Sie müssen in einen vorgelagerten Verarbeitungsschritt über alle Datensätze gehen und
HASH Werte generieren bzw. abgleichen. Umso mehr Datensätze Sie verarbeiten möchten umso langsamer wird das Ganze.
Das Vorgehen ist folgendes. Alle Datensätze lesen und über alle Felder einen eindeutigen
HASH Wert bilden. Dazu werden alle Felder auf einen
String Append Heater
gezogen um zu einer Zeichenkette zusammengefasst zu werden um dann mittels des
HASH Heater
daraus einen eindeutigen
HASH Wert zu bilden. Ändert sich ein Inhalt auch nur an einem Feld ist auch der HASH Wert unterschiedlich. Die HASH Werte der einzelnen Datensätze werden in einer separaten Tabelle gespeichert. Zusätzlich wird hier wieder ein JA/NEIN Feld aktualisiert, worüber dann der Datenabgleich stattfindet.
Im zweiten Verarbeitungsschritt können dann die seitdem letzten lauf geänderten Datensätze über eine SQL JOIN über beide Tabellen exportiert werden. Am Ende der Verarbeitung muss dann wieder das JA/NEIN Feld [Geändert] auf NEIN bzw. FALSE gesetzt werden. Das wird wieder mittels des
SQL Heater
am Ende der Verarbeitung durchgeführt.
Hier der SQL JOIN Befehl um anhand der
HASH Werte Tabelle nur geänderte Datensätze zu exportieren.
select T1.* from [t_Tabelle1] as T1 inner join [t_AbgleichTabelle1] as T2 on T1.ID = T2.ID where [T2].[Geändert] = TRUE
Hinweis: Falls der SQL zu kompliziert ist, könnten Sie das auch über eine Access Abfrage/View der beiden Tabellen durchführen.
So kann über
HASH Werte ermittelt werden ob sich Daten in seit einem letzten Datenexport geändert haben und nur diese geänderten Daten werden exportiert.
Siehe Beispiel "geänderte-datensätze-über-hash-werte.fhd" im Anhang
Schlusswort
Das hier beschriebene Vorgehen funktioniert nicht nur mit dem
Access Adapter
! So können im Prinzip aus jeder Datenbank nur geänderte Datensätze exportiert oder aber weiterverarebeitet z.B. aktualisiert werden.