Mehrere Tabellen auslesen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Mehrere Tabellen auslesen

    Hallo zusammen.

    Ich stehe mal wieder vor einem kleinerem Problem mit meiner MySQL Datenbank. Ich habe in meiner DB 3 Tabellen, die ich alle zusammen in ein Grid bringen soll. Hintergrund ist folgender:

    Wir haben hier in der Firma verschiedene Produkte die wir herstellen. Nicht jeder Mitarbeiter beherrscht aber den Aufbau jedes Produkts. Daher die Anforderung eine Qualifikationsmatirx zu erstellen, die anzeigt, welcher Mitarbeiter welches Produkt wie gut zusammenbauen kann.

    Dazu habe ich in meiner DB folgende Tabellen:

    Artikel:
    id
    artikelnummer
    bezeichnung
    ....
    .....
    ....

    Mitarbeiter
    id
    vorname
    nachname
    ...
    ...
    ...

    ma_quali
    id
    ma_id /Id des Mitarbeiters
    at_id /ID des Artikels
    quali /Qualifikaktion in %


    Aussehen soll das ganze dann so, dass ich ein Grid habe in dem ich für jeden Artikel eine Spalte, und für jeden Mitarbeiter eine Zeile habe. Entsprechend sollen dann die Zahlen eingetragen sein. Grundsätzlich kann ich das auch umsetzen. Allerdings scheint mir meine Herangehensweise nicht wirklich sinnig zu sein. Bzw bin ich eigentlich davon überzeugt, dass es eine bessere Variante geben müsste bei alledem was ich bisher über das Thema gelernt habe.

    Müsste ich es ohne Hilfe umsetzen, würde ich zuerst für jeden Artikel ein der DB eine Spalte erstellen lassen und hinterher in einer zweiten Abfrage für jeden Mitarbeiter eine Zeile. Hinterher würde ich dann entsprechend das Grid in einer dritten Abfrage füllen.

    Das würde warscheinlich auch funktionieren. Allerdings halte ich es für recht unelegant und warscheinlich wird das auch recht langsam sein. Wünschenswert wäre daher nach Möglichkeit eine Lösung über ein Typisiertes Dataset so wie ich es bei allen anderen Auswertungen auch verwende. Sodass ich nur noch das Dataset mit dem Grid verknüpfen muss. Das würde das ganze nicht nur schneller sondern auch unkomplizierter machen. Besonders im Hinblick auf die Editierbarkeit.
    Also entweder habe ich einen Fetten Denkfehler oder aber du missverstehst mich bzw ich habe mich nicht richtig ausgedrückt.

    Betrachtet man das Datagridview als eine Art Koordinatensystem (erste zelle links oben hat die koordinate 0,0) dann hatte ich bei dem anderen Threat das Problem das ich aud er X-Achse des DGVs eine "vorgegebene Anzahl" von Spalten hatte nämlich die Spalten die ich auch in meiner DB hatte. Auf der Y - Achse hatte ich dann n Datensätze (also Zeilen) und wollte dann bestimmte IDs mit den entsprechenden werten aus einer anderen Tabelle anzeigen lassen.

    Das habe ich auch jetzt auch wunderbar hinbekommen.

    Jetzt ist aber die Ausgangssituation anders denn ich habe n Spalten die ich jetzt nicht mehr im Designer vorgebe sondern die der anzahl an Datensätzen in der Tabelle Artikel entspricht auf der X-Achse und auf der Y-Achse habe ich ebenfalls n Zeilen die wiederum aus der Tabelle Mitarbeiter kommt.

    Ich hoffe das ich das jetzt so erklären konnte das man den Unterscheid erkennt...

    Struktuell ist es das gleich ja. Ein DGV zu erstellen mit dem ich 3 Spalten (ma_id,at:id,quali) zu erstellen und die entsprechenden bezeichnungen zur anstatt den IDs anzeigen zu lassen wäre nicht das Problem. Aber auch da habe ich dann wieder 3 vorgegebene Spalten...

    Ich hoffe das ist jetzt verständlich
    ah - jetzt verstehe ich "Kreuztabelle".

    Da gibts keine Databinding für, sondern da muß in jede Zelle händisch eingetragen und wieder ausgelesen werden, und bei Daten-Änderungen nachgeführt und pipapo.
    Hab grad neulich einen Ansatz angefangen, aber verfolge ich evtl. nicht weiter im angesicht der aufkommenden Komplikationen.

    Also der Ansatz besteht darin, eine Verwaltungs-Klasse zu coden, die dann mit dem Grid und den Daten bekannt gemacht wird.
    Die übernimmt auch das Zeichnen von RowHeadern, und stellt die Werte in typisierter Form zur Verfügung, und kann man noch was dranbauen, dass auch Datensätze generiert werden, wenn man was reinschreibt, usw..
    Mir war vor allem wichtig, es in eine Klasse auszulagern, sonst hat man ganz schnell 500 Zeilen Code im Form, die nur auf einem einzigen DGV herumhühnern.

    wie gesagt: unausgereift und auch Bläh-Ware, also meine Helpers-Projekte würde ich normal noch auf das hier wirklich notwendige reduzieren.
    Dateien
    Kleiner Nachtrag..

    Ich habe das Problem jetzt soweit gelöst indem ich zuerst die spalten , dann die zeilen und dann den Inhalt Manuell aus der DB lade und in das DGV eintrage. Die Werte führe ich dann über das endedit event in der DB nach und bleibe so immer auf Stand.

    Das ganze funktioniert sogar "relativ" schnell. Bei ca 30000 Datensätzen erscheint mir eine Wartezeit von 2,5 Sekunden ganz akzeptabel. Danke nochmal an EdR für den Hinweis
    ich empfehle ja immer, nie etwas vonne DB in ein DGV zu laden.
    Immer Daten in typisierte DataTables füllen, und dort verarbeiten!
    Vorzugsweise binden, aber scheint hier ja mit diesem DGV nicht möglich.

    2 Vorteile (es gibt glaub noch mehr) dieser Vorgehensweise:
    1. du kannst weitere Views an dieselben Daten hängen - evtl auch deine Kreuztabelle mit diesen anneren Views synchronisieren, etwa inne KT eine Zelle anwählen, und daneben gibts dann Detail-Infos zum Mitarbeiter und zum Artikel oder zur Ma_Qualle
    2. du brauchst nix nachführen - typisiertes Dataset hat eine Änderungsverfolgung eingebaut.