Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: 2x mysqlTables (read/write) Abgleich

2x mysqlTables (read/write) Abgleich 5 Jahre 2 Wochen her #707

  • Frank schulte
  • Frank schultes Avatar
  • Offline
  • New Member
  • Beiträge: 3
Guten Tag erst einmal,

Ich habe 2 MySQL Tables (Read / Write)- auf dem localhost

auf der Read stehen folgende positionen

-Menge (z.B.1,2,3)
-free_OXID(ArtikelNr.): (z.B. 136000010-040 "string")

auf der Write Seite stehen mehrere Tabellen aber
wichtig sind nur 3

-Menge (z.B.1,2,3)
-Artikel Nr (z.B. 136000010-040 "string")
-Aktion (add/delete/update "string")

Meine Frage lautet, wie ich folgendes hinbekommen

Wenn Wert vorhanden (Artikelnummer) dann
Prüfe Menge; wenn "ReadMenge" nicht gleich WriteMenge
dann AbgleichMenge (und im Feld "Aktion" den Vermerk "update")
Wenn Wert nicht vorhanden, dann im Feld "Aktion" den Vermerk "delete"

Der Primary Key ist "Artikel Nr", da diese Spalte eine
Explizite Zuweisung zulässt

habe es mit dem Heater "lookup" wie im Forum beschrieben
versucht. Jedoch verstehe ich nicht, woran sich die
Werte des "lookup" orientieren müssen "an Write oder an Read?)
Ich denke für euch Profis sollte das nicht alt so schwer sein, ich habe es schon mit dem "lookup Heater" Probiert, aber es klappt nicht.
habe mir dazu den Beitrag:

flowheater.net/de/forum/allgemeine-theme...ergleich-beim-import

bekomme jedesmal die Fehlermeldung: Error lookup,
denke das ich die Logik dieser Prozedur nicht verstanden
habe, insbesondere den Wert "where und $1"

Über eine Antwort, die mir weiterhilft währe ich sehr dankbar.

Gruß und weiter so :)
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: 2x mysqlTables (read/write) Abgleich 5 Jahre 1 Woche her #708

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Herr Schulte,

Der Datenbank Lookup Heater ist zugegeben etwas umständlich in der Handhabung. Mit Version 2.2.1 wurde hier eine etwas einfachere Variante eingeführt mit der dynamische SQL Statements ausgeführt werden können eingeführt, damit ist es etwas einfacher das durchzuführen.

Zuerst wird die Artikelnummer über den Parameter Heater zur Bildung von dynamischen SQL Statements zwischengespeichert. Dieser Paramater $ArtikelNrRead$ wird in allen SQL Heatern verwendet um die richtigen Werte für Menge, etc. abzufragen.

Dann benötigen Sie dazu 3 SQL Heater. 1x um die Artikelnummer abzufragen, 1x um die Menge des aktuellen Artikels abzufragen und 1x um den alten Wert der Aktion abzufragen.

Der SQL Heater, der die Menge abfragt liegt ohne Verbindung zur READ bzw. WRITE Seite auf dem Designer. Der Wert wird hier in einem Parameter Zwischengespeichert. Diesen Wert benötigen wir um Ihn anschließend in einem IF-THEN-ELSE Heater mit dem Wert der READ Seite zu vergleichen. Schauen Sie sich hierzu den zweiten IF-THEN-ELSE Heater in der Definition an.

Der SQL Heater der die Artikelnummer abfragt wird benötigt um zu entscheiden ob der Datensatz aktualisiert (Update) oder hinzugefügt (Insert) wird. Hier prüft der erste IF-THEN-ELSE Heater ob die Artikelnummer gefüllt ist oder nicht. Ist die Artikelnummer leer wird hier über den X-Value Heater der statische Wert "Add" in die Aktion gestellt. Ist die Artikelnummer nicht leer entscheidet die zweite IF-THEN-ELSE Abfrage anhand der Menge ob "Update" oder aber der bisherige alte Wert der Tabelle in die Aktion gestellt wird. Der bisherige Wert über einen weiteren SQL Heater von der WRITE Seite abgefragt.

Ist jetzt nicht ganz so einfach. Schauen Sie sich dazu mal das beiliegende Beispiel an hier wird es denke etwas klarer.

Hinweis: Hier werden die Informationen lediglich aus 2 Unterschiedlichen Tabellen geholt. Es wird auch keine MySQL Datenbank sondern eine MS Access Datenbank verwendet.

PS: Das mit dem Delete vermerk ist etwas komplizierter. Das würde ich dann angehen wenn das Beispiel für Insert und Update soweit klar ist.

Anhang datenabgleich.zip nicht gefunden

Anhang:
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: 2x mysqlTables (read/write) Abgleich 5 Jahre 1 Woche her #709

  • Frank schulte
  • Frank schultes Avatar
  • Offline
  • New Member
  • Beiträge: 3
guten Tag Herr Stark,

vielen Dank für Ihre kurzfristige Antwort.

Ich habe Ihren Vorschlag im Flowheater auf
meine Datenbank nachgebaut.

Es ist so, das in der "Write Datenbank"
keine Daten hinzukommen sollen, da habe ich mich etwas
undeutlich ausgedrückt.
Die Daten, die in der ReadDatenbank "zuviel" sind,
sollen in keinster weise berücksichtigt werden.
Der Hauptaugenmerk sind:

-- update (vermerk) + (Mengenkorrektur
-- delete (vermerk)

1. Entweder (update) - "Menge" aktualisieren
und vermerk "update" im Feld Aktion

2. oder (delete) falls nicht mehr vorhanden
Jedoch sollen alle Inhalte beibehalten werden

Standartmässig ist das Feld Aktion "leer"

Es soll lediglich beim "delete" der Vermerk gemacht werden.

Desweiteren befinden sich in der ReadDatenbank
Doppelte einträge, die mit der
Spalte "Status" vorher rausgefiltert werden müssen
die doppelten einträge haben den Wert "verkauft" bzw.
"nverkauft", das erklärt bei mir die Fehlermeldung
"Duplicate entry for key Primary"



könnten Sie mir dazu eine Erläuterung schicken?

vielen Dank.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: 2x mysqlTables (read/write) Abgleich 5 Jahre 1 Woche her #710

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Herr Schulte,

Inserts können Sie ganz einfach unterbinden wenn Sie auf der WRITE Seite im Configurator die Option Insert deaktivieren, so werden nur Updates ausgeführt.
Zum Filtern der Daten müssen Sie den Filter Heater zusammen mit einer IF-THEN-ELSE Bedingung einsetzen. Ich habe dazu das Beispiel etwas angepasst.

Zum Delete Kennzeichen) Hier habe ich Ihnen ebenfalls ein kleines Beispiel erstellt, schauen Sie sich in der Anlage die Defintion "Delete-Kenntzeichen.fhd" an.

Um das durchzuführen benötigen Sie eine zweite Definition, hier müssen Sie die Tabellen tauschen! Auf der READ Seite lesen Sie die MySQL Tabelle ein, die die evtl. bereits gelöschten Datensätze enthält. Hier habe ich die WRITE Seite so konfiguriert, dass keine Insert oder Updates auf der Datenbank vorgenommen werden, es wird lediglich eine Textdatei mit den SQL Statements erzeugt. Das ist wichtig, da Sie sonst evtl. Daten wieder überschreiben würden. Die Definition fragt jetzt wie bei der 1. Definition auf der jeweils anderen Seite nach ob die ArtikelNummer vorhanden ist. Wurde die Artikelnummer gefunden wird der Datensatz im FlowHeater gefiltert. Wird der Datensatz nicht gefunden, läuft der SQL Heater (ohne weitere Verbindung) an und führt das u.s. SQL Kommando aus.

Update ArtikelREAD set Status = 'Delete' where ArtikelNr = '$ArtikelNrWrite$'

Der Parameter $ArtikelNrWrite$ wird bei der Ausführung wieder jeweils durch den gerade aktuellen Wert ersetzt.

Achtung: Die Tabellennamen sind jetzt gedreht!

Anhang datenabgleich-20111122.zip nicht gefunden

Anhang:
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.084 Sekunden