Darstellung flexibler Daten

  • Ich umschreibe es mal allgemein:

    Ich habe eine Anzahl (<200) Artikel mit differierenden Eigenschaften. Wenn ich den Artikel anzeige, möchte ich dessen Eigenschaften darstellen. Das können 10 aber auch 30 Eigenschaften sein.

    Mein erster Gedanke war das Erfassen in einer SQLite DB.
    Für jede Eigenschaft ein Feld - führt zu Leerfeldern bei geringer Anzahl von Eigenschaften und ist nicht flexibel, wenn ein Artikel hinzukommt mit einer größeren Anzahl Eigenschaften.

    Somit favorisiere ich jetzt je Artikel eine Datei (Dateiname=Artikelnummer) mit Inhalt Eigenschaft=Wert. Und nur den Dateilink mit einem weiteren Feld 'Tags', das alle Eigenschaftsnamen beinhaltet, hinterlege ich in einer DB. Somit kann ich auch gezielt Artikel mit bestimmten Eigenschaften suchen.

    Meine Frage zielt auf die optische Darstellung.
    Der einfachste Weg: Listview. Geringster Aufwand, alles sicht- bzw. scrollbar.
    Der nach meinem Geschmack "schönere" Weg: Je Eigenschaft <Label-Eigenschaft> <Input_RO-Eigenschaftswert>. Etwas aufwändiger.

    Wie würdet ihr es machen?

  • Hmm.

    Auch wenn ich den Hintergrund verstehe, würde ich alles in die DB packen. Die Suche ist schneller und flexibler und die Pflege für Dritte wird nachvollziehbarer, da alle mit Datenbanken was anfangen können. Zudem sind Dateien für mich immer störanfälliger. Wie schützenswert sind die Informationen?

    Die Entscheidung würde ich allerdings auch nach der Herkunft der Informationen ausrichten. Kommen die als Datei, dann muss ich sie nicht anpassen. Kommen sie aus anderen Systemen, kann ich sie vielleicht direkt in eine DB schreiben.

    So viele Gedanken

    Guten Morgen

  • das sagt die KI dazu.

    Für dein Vorhaben gibt es eine sehr elegante Lösung, die sowohl dein Datenbank-Problem löst als auch die optische Darstellung dynamisch und modern gestaltet.

    Der beste Ansatz für die Daten (EAV-Modell)

    Nutze weiterhin SQLite, aber verwende das Entity-Attribute-Value (EAV) Modell anstelle von Textdateien. Das ist der Standard für Produkte mit flexiblen Eigenschaften. Du benötigst nur zwei Tabellen:

    1. Artikel: ArtikelID, Artikelnummer, Name
    2. Eigenschaften: ArtikelID, EigenschaftsName, EigenschaftsWert
    • Vorteil: Keine leeren Felder, unendlich flexibel, rasend schnell durchsuchbar (besser als Textdateien) und extrem leicht in AutoIt abzufragen.

    Die optische Darstellung: Der "schönere" Weg (Dynamische GUI)

    Ein ListView ist funktional, wirkt aber oft altbacken. Da du maximal 30 Eigenschaften pro Artikel hast, ist eine dynamische GUI mit Labels und Inputs absolut performant und optisch überlegen.

    Du musst die Controls nicht manuell erstellen. Erzeuge sie stattdessen dynamisch per Schleife basierend auf den Eigenschaften des ausgewählten Artikels.

    Hier ist ein einfaches, funktionsfähiges AutoIt-Beispiel, wie du so eine dynamische Anzeige umsetzt:

    autoit

    Verwende Code mit Vorsicht.


    Profil-Tipps für die Umsetzung:

    • Das Scrollbar-Problem: Wenn ein Artikel 30 Eigenschaften hat, passt das nicht mehr in ein kleines Fenster. Erstelle in AutoIt ein Child-Fenster mit Scrollbars (_GUICtrlScrollbar_Create) innerhalb deiner Haupt-GUI. So bleibt deine Maske kompakt, aber der Nutzer kann sanft durch die 30 Inputs scrollen.
    • Alternative "Gegenstands-Ansicht" (PropertyGrid): Wenn du den ListView-Aufwand mit der Input-Optik kombinieren willst, schaue dir im AutoIt-Forum das UDF _GUICtrlPropertyGrid an. Das sieht aus wie die Eigenschafts-Leiste in Entwicklungsumgebungen (links Name, rechts Wert) und scrollt automatisch.

    Ich würde dir definitiv zum EAV-Datenbankmodell + dynamischen Labels/Inputs mit Scrollbar raten. Das fühlt sich für den Endnutzer an wie eine professionelle Software.


    Hier ist ein vollständiges, praxisnahes AutoIt-Beispiel, das zeigt, wie du das EAV-Modell (Entity-Attribute-Value) in SQLite aufbaust, Daten abfragst und für einen bestimmten Artikel ausgibst.

    In diesem Setup speichert die Datenbank nur die Eigenschaften, die ein Artikel wirklich besitzt. Es gibt keine leeren Spalten (NULL-Werte) und du bleibst maximal flexibel.

    AutoIt & SQLite: Das EAV-Beispiel

    Kopiere diesen Code direkt in Scite. Er erstellt eine Datenbank im Arbeitsspeicher (:memory:), befüllt sie mit Testdaten und zeigt dir, wie einfach die Abfrage ist.

    autoit

    Verwende Code mit Vorsicht.


    Die Vorteile dieses SQL-Setups für dein Projekt:

    1. Dynamisches Array für deine GUI: Das Ergebnis-Array $aResult (wenn du Zeile 0 ignorierst) hat exakt das Format, das die dynamische GUI-Schleife aus der ersten Antwort benötigt ($aResult[$i][0] = Name, $aResult[$i][1] = Wert). Du übergibst das Array einfach an deine Anzeigefunktion.
    2. Gezielte Suche (Dein "Tags"-Gedanke): Wenn du alle Artikel suchst, die z.B. die Eigenschaft Farbe = Blau haben, schreibst du einfach:

      sql

      SQL
      SELECT ArtikelID FROM tbl_Eigenschaften WHERE EigenschaftsName = 'Farbe' AND EigenschaftsWert = 'Blau';

      Verwende Code mit Vorsicht.


    3. Keine Daten-Redundanz: Wenn du morgen ein neues Produkt mit 50 völlig neuen Eigenschaften (z.B. "Akkukapazität", "Profiltiefe") hinzufügst, musst du keine Tabellenstruktur in der DB ändern. Du fügst sie einfach als neue Zeilen in tbl_Eigenschaften ein.