FlowHeater Demo Video
 
Der Daten Import / Export Spezialist
 
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
×

Erweiterte Suche

Suche nach Stichwort
×

Suchoptionen

Finde Beiträge von
Ergebnisse sortieren nach
Suche zu einem bestimmten Zeitpunkt
Zu Resultat springen
Suche in Kategorien
×

Suchergebnisse

Gesucht wurde: SQL Lookup
09 Jan 2015 06:27
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Marcus,

um zwei CSV Textdateien zusammenzuführen gibt es mehrere Möglichkeiten.

Wenn wie in Ihrem Fall nur wenige Daten aus einer zweiten CSV benötigt werden können Sie das über den String Replace Heater im erweiterten Modus mit Hilfe eines CSV Lookups durchführen.

Ein Beispiel wie so ein CSV Lookup funktioniert finden Sie hier: CSV Lookup Beispiel

Hinweis: Pro Wert den Sie so aus der zweiten CSV Datei holen möchten benötigen Sie einen separaten String Replace Heater.

Etwas komplizierter aber dafür wesentlich leistungsfähiger geht es über eine temporäre Datenbank. Wie das geht ist in einem ausführlichen Beispiel hier beschrieben: CSV und Excel Daten über SQLite Datenbank zusammenführen

Hier wird das zwar anhand einer CSV und einer Excel Datei beschrieben, die Logik kann aber auch auf zwei CSV Dateien angepasst werden.
Kategorie: TextFile Adapter
29 Dez 2014 06:44
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Brenz,

der Export von mehreren SQL Server Tabellen in eine CSV Textdatei ist relativ einfach. Hierzu müssen Sie lediglich das SQL SELECT Statement auf der READ Seite anpassen und die weiteren Tabellen über einen JOIN miteinander verknüpfen.

Beispiel SQL Select Statement

select p .name, p .gebdat, w.wohnort, v.verein
from t_person as p
inner join t_wohnort as w on p.wohnortid = w.id
inner join t_verein as v on p.vereinid = v.id
‚ evtl. weitere SQL Server Tabellen
order by p.name

So verknüpft der SQL Server die Tabellen miteinander und liefert die richtige Ergebnismenge zurück.

Der Import ist deutlich komplizierter es gibt hierzu mehrere Möglichkeiten. Am einfachsten geht es über mehrere Definitionen die nacheinander ausgeführt werden.

Sie benötigen für jede SQL Server ID Tabelle eine separate Import Definition.

z.B.
  1. eine Import Definition die über die CSV Datei geht und lediglich nicht vorhandene Wohnorte in der Tabelle Wohnorte einfügt.

  2. eine Import Definition die über die CSV Datei geht und lediglich nicht vorhandene Vereine in der Tabelle Vereine anfügt.

  3. evtl. weitere Import Definitionen für weitere SQL Server ID Tabellen.

Wenn Sie in diesen Import Definitionen die Option „Daten anfügen (Insert)“ sowie „Vorhandene Datensätze ignorieren“ aktivieren und dann noch den Ausgelesenen Primary Key von der AutoWert (ID Spalte) auf z.B. den Wohnort oder Vereinsnamen legen, prüft der FlowHeater automatisch anhand dieses Wertes ob ein passender Datensatz bereits existiert und fügt nur einen neuen Datensatz an wenn der Wert noch nicht vorhanden ist. Weitere Informationen dazu finden Sie hier: Import CSV Textfile zu MSSQL vorhandene Datensätze überspringen

Zum Schluss benötigen Sie noch Ihre eigentliche CSV Datenimport Definition. Um die ID Werte zu holen benötigen Sie für jede ID Spalte (Wohnort, Verein, …) einen SQL Heater über den Sie einen Daten Lookup abbilden.

Beispiel ID Lookup SQL Statement
select id from t_verein where verein = ‚$VEREIN_AUS_CSV$‘

der Parameter$VEREIN_AUS_CSV$“ muss dazu vorher mittels des Set Parameter Heaters gesetzt werden. Im Anhang finden Sie ein Beispiel dazu inkl. einer Access Datenbank .



Hinweis: Die einzelnen Daten Import Definitionen können mittels des Batch Moduls und eines kleines CMD Skripts automatisiert hintereinander ausgeführt werden.

Beispiel Batch CMD Skript

@echo off
FHBatch.exe CSV-Abgleich-Wohnorte.fhd
FHBatch.exe CSV-Abgleich-Vereine.fhd
FHBatch.exe CSV-Import-Personen.fhd

Ein genaueres Beispiel finden Sie hier: Automatisierter Batch CSV Import mit MS Access


Dateianhang:

Dateiname: csv-import...llen.zip
Dateigröße:14 KB
Kategorie: SqlServer Adapter
09 Aug 2014 10:03
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Bojic,

ich denke Sie möchten nicht sortieren sondern lediglich einen Abgleich (Daten Lookup) durchführen?

Je nachdem welche bzw. wie Ihre Daten vorliegen gibt es hier mehrere Möglichkeiten. Textdateien über einen CSV Lookup mittels des String Replace Heaters . Oder aber wenn die Daten in einer Datenbank vorhanden sind können Sie den SQL Heater oder aber den Lookup Heater dazu verwenden.

Wenn Sie hier im Forum nach CSV Lookup oder generell Lookup suchen finden Sie bereits einige Beispiele.

PS: Ich helfe Ihnen wirklich gerne, aber zukünftig bitte wenn Ihre Frage beantwortet ist hier noch eine kurze Antwort posten, Danke.
Kategorie: Allgemein
09 Aug 2014 09:47
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Bloess,

Sie benötigen für jede CSV Satzart eine separate Definition. Hier fügen Sie zu allererst einen Filter ein, so dass nur die gewünschte CSV Satzart verarbeitet wird. Ich habe Ihnen mal eine Beispiel für die CSV Satzart C* erstellt. Das Beispiel verwendet eine Access Datenbank und ist komplett funktionsfähig. Würde aber auch mit dem SQL Server zusammen laufen.

Dann verwende ich im Beispiel eine Kopfzeile um die darin enthaltene „Kunden-Nr“ zu extrahieren. Die Kopfzeile wird dabei komplett in den Parameter $KOPF$ eingelesen, der dann mit Hilfe des String Split Heaters lediglich die gewünschte „Kunden-Nr“ zurückliefert. Für die VID verwende ich einen SQL Heater . Den dafür erforderlichen Parameter setzen wir vorher mittels des Set Parameter Heaters .

Hinweis: Der SQL Heater ist wesentlich einfacher und flexibler als der Datenbank Lookup Heater , deshalb wurde er in dem Beispiel verwendet.

Das setzen des Autowert Feldes „ID“ ist nicht erforderlich, darum kümmert sich die Datenbank. Alle anderen Felder wurden nur 1:1 durchgereicht.

Für die CSV Satzart P* müssten Sie sich auf diese Basis eine weitere Import Definition basteln. Über das Batchmodul können Sie dann die beiden Import Vorgänge automatisiert zusammen ausführen lassen.

Hier noch ein kleines Beispiel wie mit Hilfe des Batch Moduls CSV Dateien automatisiert eingelesen werden können: Automatisierter Batch CSV Import mit MS Access


Dateianhang:

Dateiname: unterschie...eren.zip
Dateigröße:16 KB



Kategorie: TextFile Adapter
07 Aug 2014 05:54
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Schäfer,

das .NET Skript scheint nicht das Problem zu sein, funktioniert hier jedenfalls problemlos. Zum Testen musste ich aber den Oracle Adapter der Write Seite tauschen und den Datenbank Lookup Heater entfernen. Bitte versuchen Sie mal bei Ihnen ebenfalls nur den Lookup Heater zu entfernen um dann einen Test ohne durchzuführen. Wenn das Funktioniert können Sie versuchen den Lookup Heater erneut einzufügen und zu konfigurieren ich denke dass hier irgendetwas nicht sauber übernommen wurde. Alternativ zum Lookup Heater empfehle ich Ihnen den SQL Heater zu verwenden, der ist wesentlich einfacher zu konfigurieren und auch wesentlich flexibler und leistungsfähiger.
Kategorie: Oracle Adapter
21 Mai 2014 06:06
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Schütz,

mehrere „unterschiedliche“ Datenquellen werden zurzeit noch nicht unterstützt, allerdings gibt es einige Lösungsansätze wie Sie das bereits jetzt relativ einfach umsetzen können.

Wenn ich Sie richtig verstanden habe geht es bei Ihnen darum mehrere Tabellen auf einmal zu exportieren. Wenn die Tabellen in einer gemeinsamen Datenbank vorliegen ist das der einfachste Fall. Hier können Sie auf der READ Seite diese Tabelle über SQL Joins miteinander kombinieren und auf einmal exportieren.

z.B. select * from tabelle1 inner join tabelle2 on tabelle1.id = tabelle2.id

Dann stehen weitere Möglichkeiten zur Verfügung um z.B. Ihre Daten aus ein, oder auch mehreren, CSV Daten anzureichern. Hier können Sie den String Replace Heater verwenden um einen CSV Daten Lookup zu implementieren. Ein Beispiel finden Sie hier: CSV Daten Lookup

Weiter allerdings etwas komplizierter wird es wenn die Daten in mehrere unterschiedlichen Datenbanken vorhanden sind. Hier müsste der Umweg über eine separate Datenbank gewählt werden. Der FlowHeater bietet hier über den SQlite Adapter die Möglichkeit während der Verarbeitung eine temporäre Datenbank anzulegen hier werden die Daten mittels mehrere Definitionen gesammelt und am Schluss über eine Finale Definition in das gewünschte Format ( CSV , XLS , ...) exportiert.

Wenn Sie mir etwas mehr Informationen geben, was Sie genau vorhaben, erstelle ich Ihnen gerne ein kleines angepasstes Beispiel dazu.
Kategorie: Allgemein
25 Jun 2013 18:43
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Tim,

Version 3.x)

Ich arbeite mit der V2.5...des FH und lese soeben das eine neue Version das lesen mehrerer eingehender Dateien unterstützt, Nun macht sich bei mir gerade Unmutbreit, denn wie ich lese, müsste ich in eine neue Vollversion investieren um die die von mir meistgenutzte Funktionalität nutzen zu können.

Die neue Version unterstützt z.Zt. mehrere Adapter nur auf der WRITE Seite. Für die READ Seite ist das für Version 3.x in Planung. Im Herbst 2013 wird hier mit einer ersten Version zu rechnen sein. Ich finde schon alleine die Antwort auf Ihre Frage wäre das Update Wert :)

Matchen von Werten) Dazu müssen Sie nicht einen .NET Script Heater verwenden. Über den String Replace Heater können Sie problemlos eine Listenverarbeitung durchführen. Mit den Einstellungen (s. Screenshot) können Sie über einen nachfolgenden IF-THEN-ELSE Heater auf gleich oder ungleich „NOT FOUND“ prüfen und sie können matchen ob ein Eintrag in einer weitere CSV Datei vorhanden ist.

Ihre eigentliche Frage) Für Ihr Vorhaben würde ich die CSV Dateien nacheinander in eine temporäre Datenbank schrieben und anschließend über eine weitere Definition wieder exportieren. Mittels des SQLite Adapters benötigen Sie hier nicht einmal eine Datenbank bzw. ein Frontend dazu. Der SQLite Adapter kann die Datenbank sowie die Tabelle(n) dynamisch anlegen sowie erweitern. Ein Beispiel wie es geht finden Sie hier: CSV Daten mergen geht auch mit Version 2.5


Das mit Ihrer dritten CSV Datei habe ich nicht ganz verstanden? Wie sollen die Daten ausgegeben werden, in eine Zeile oder alle Daten der ersten und zweiten CSV Datei wiederholt zu jedem passenden Datensatz?

Kategorie: TextFile Adapter
04 Jun 2013 06:26
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Hollenbach,

eine Möglichkeit besteht darin beide Textdateien nacheinander in eine separate Datenbank zu laden und anschließend das Ergebnis zu exportieren. Das klingt jetzt schwieriger als es ist, der FlowHeater bringt dazu alles mit. Ein Beispiel wie es generell geht finden Sie hier: CSV und Excel Daten zusammenführen

Etwas einfacher würde es über eine CSV Ersetzungsdatei funktionieren. Hier wandeln Sie eine Textdatei(die kleinere) in eine CSV Datei um und verwenden diese im Replace Heater für einen CSV Lookup und holen anhand des Keys die Daten heraus. Ein Beispiel wie das geht finden Sie hier: CSV Lookup
Kategorie: Allgemein
24 Dez 2012 12:19
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Kraus,

dann ist die Lösung über den SQL Heater nicht brauchbar, da hier der Bezug zu einem eindeutigen Datensatz fehlt.

Wenn Ihre SQL Tabelle einen Primary Key hat (z.B. AutoIncrement) hat können Sie folgendermaßen vorgehen.
Verwenden Sie den benötigten Datenbank Adapter auf der READ sowie auf der WRITE Seite. Geben Sie auf der READ Seite die gleiche Tabelle wie auf der WRITE Seite an. Lesen Sie die Felder ein und verbinden Sie die Primary Key Felder der READ mit der WRITE Seite.

Dann benötigen Sie noch einen String Replace Heater mit dem Sie den Prozentsatz aus einer CSV Textdatei, ähnlich wie mit dem SQL Heater, einlesen können. Die Berechnung ist dann die gleiche wie im vorherigen Beispiel
Sie schreiben, dass die Prozentwerte in einer Excel Datei vorliegen. Diese müssten Sie vorher mit Hilfe einer weiteren Definition in eine CSV Datei umwandeln.

In der Anlage ist dazu wieder ein kleines Beispiel. Im Beispiel werden zusätzlich nicht vorhandene Preiserhöhungen gefiltert.
Ein weiteres Beispiel zum String Replace Heater finden Sie hier CSV Lookup

Hinweis: Damit dieses Beispiel funktioniert müssen Sie auf der WRITE Seite Datenbanktransaktionen deaktivieren, s.Bild.



Anhang update_preise_berechnung2.zip wurde nicht gefunden.

Kategorie: Excel Adapter
20 Dez 2012 20:30
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Kraus,

um mit dem alten Preis in der Definition rechnen zu können müssen Sie diesen mittels des SQL Heaters aus der Tabelle lesen (Datenbank Lookup). Damit nur Updates auf der WRITE Seite generiert werden deaktivieren Sie die Option "Daten anfügen (Insert)" und aktivieren dafür die Option "Daten aktualisieren (update)" im Configurator auf der WRITE Seite.
Ziehen Sie nun einen SQL Heater auf den Designer und tragen Sie für das SQL Statement folgendes ein.

select Preis from Ihr-Tabellenname where ArtikelNr = '$ArtNr$'

Hinweis: Falls die Artikelnummer als Zahlenwert (INT, LONG, DECIMAL, ...) im SQL Server gespeichert dürfen Sie die Artikelnummer nicht in Hochkommas einschließen und ggf. über Menü->Bearbeiten->Parameter die Zahlenformatierung auf ohne Tausendertrennzeichen und ggf. ohne Nachkommastellen einstellen.

Hiermit wird die Spalte Preis von der Tabelle "Ihr-Tabellenname" gelesen. Der Parameter $ArtNr$ wird mit dem aktuellen Wert des aktuellen Datensatzes der READ Seite ersetzt. Damit das Funktioniert benötigen Sie noch einen Set Parameter Heater mit dem die aktuelle Artikelnummer der READ Seite dem Parameter $ArtNr$ zugeordnet wird.

Mit dem so ermittelten Wert können Sie ihren Prozentsatz ausrechnen und den neu berechneten Wert der Spalte Preis zuordnen.

Im Anhang finden Sie ein kleines Beispiel dazu. Hier wird anstatt des Excel Adapters eine einfache CSV Datei gelesen sowie wird auf der WRITE Seite eine kleine Access Datenbank verwendet.

Anhang update_preise_berechnung.zip wurde nicht gefunden.

Kategorie: Excel Adapter
05 Nov 2012 06:31
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Altermatt,

ich habe in Ihrem Beispiel das Ganze mal für die Artikelbezeichnung über einen .Net Script Heater durchgeführt. Hier das VB.NET Skript das verwendet wurde.
Achtung: Mangels Testdaten nicht getestet!
Public Function DoWork() As Object

  Dim ArtNr as String
  Dim ArtBez as String

  ' 1. Eingangsparameter = ArtikelNr
  ArtNr = InValues(0).GetString()

  ' 2. Eingangsparameter = Artikelbezeichnung
  ArtBez = InValues(1).GetString()

  ' Zugriff auf den Write (Access) Adapter
  Dim write as AccessAdapter
  write = AdapterWrite

  ' SQL Select aufbauen
  Dim SQL as String
  SQL = "select Bezeichnung from Produkte where "
  
  SQL = SQL + "ARTNr = '" + ArtNr + "' AND "
  SQL = SQL + "Bezeichnung = '" + ArtBez + "'"

	
  Dim result as Object
  ' SQL Statement ausführen
  result = write.Execute(SQL, true) ' SQL ausführen, 2. Parameter true = mit Rückgabe

  ' Rückgabe prüfen
  If result is Nothing Then
    DoWork = "Ja"
  Else
    DoWork = "Nein"
  End if

End Function
Sie benötigen für jedes Feld einen .Net Script Heater sowie oben stehendes VB Skript. Im Skript müssen Sie die Tabellenfelder anpassen die Sie abfragen möchten sowie müssen Sie darauf achten, dass Sie bei der SQL WHERE Bedingung die richtige Formatierung (Zahlen, Datum, String) verwenden. Das nimmt Ihnen bei der Datenbank Lookup Variante der Lookup Heater anhand der Eingehenden Datentypen ab!

Anhang produkte-20121105.fhd wurde nicht gefunden.

Kategorie: Access Adapter
25 Jul 2012 16:29
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Christoph,

handelt es sich bei den Tabellen um Datenbanktabellen dann können Sie dazu den SQL-Heater verwenden. Hier geben Sie z.B. an

SELECT spalte2 from tabelle2 where spalte1 = $ID$

Den Parameter $ID$ müssen Sie in diesem Fall über den Parameter Heater mit der aktuellen ID der Tabelle1 befüllen.

Handelt es sich aber um 2 CSV Tabellen können Sie einen ähnlichen CSV Lookup über den String Replace Heater durchführen. Hier finden Sie ein Beispiel dazu: CSV Lookup mit Replace Heater
Kategorie: Allgemein
05 Dez 2011 07:34
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Klaus,

es ist kein Problem immer den ganzen Datensatz zu aktualisieren. Wenn Sie nicht alle Felder der Tabelle miteinander verbinden werden auch nur für verbundene Datenbankfelder SQL Updates Statements gebildet.

Wenn Sie nur Felder aktualisieren möchten in denen auf der WRITE Seite bestimmte Felder einen bestimmten Wert haben müssen Sie dazu diese Felder entweder über den Datenbank Lookup Heater (alt) bzw. den SQL Heater (neu) auslesen. Ein Beispiel dazu finden Sie in folgenden Forumsbeitrag: MySQL Abgleich

Das mit den neuen Datensätzen haben wir ja im vorgehenden Forumsbeitrag bereits behandelt.
Kategorie: Allgemein
21 Nov 2011 05:46
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
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 wurde nicht gefunden.

Kategorie: MySQL Adapter
19 Nov 2011 15:20
  • Frank schulte
  • Frank schultes Avatar
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:

https://flowheater.net/forum-de/access/40-datenvergleich-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 :)
Kategorie: MySQL Adapter
31 - 45 von 60 Ergebnissen angezeigt.
Ladezeit der Seite: 1.020 Sekunden

andere Sprachen

en

FlowHeater Home

de en

Impressum/Kontakt

Datenschutz

Copyright © 2009-2021 by FlowHeater GmbH.
Alle Rechte vorbehalten.

Follow us on

twitter  facebook

YouTube

 de en