SELECT von 3 Tabellen in einer Reihe im DataGridView (1:n Verbindung)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SELECT von 3 Tabellen in einer Reihe im DataGridView (1:n Verbindung)

    Ich benutze Microsoft Access. Hier unten implementiere ich OleDb und meinen Connectionstring. Meine Datenbank besteht aus 3 Tabellen. Computer, Nutzer und Computernutzer. Ein Nutzer kann mehr als einen PC haben.
    Mein Ziel ist die Computertabelle komplett im DataGridView auszulesen, und bei jedem Computer auch noch im DataGridView die Nutzer des Computers, falls es welche gibt, wenn nicht einfach leer lassen.
    Wenn mehrere Nutzer den PC nutzen, dann mit Komma trennen.

    Imports System.Data.OleDb

    ConnectionString: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
    Persist Security Info=False;


    Tabelle Nutzer:
    us_id | us_firstname | us_lastname | us_departement
    1 | Michael | Rotter | IT
    2 | Peter | Parker | Photographing
    3 | Jonas | Klos | Director

    Tabelle Computer: (hat 6 weitere Spalten, wie RAM, Netzteil, etc aber die hab ich mal rausgelassen)
    co_id | co_name | co_gpu | co_cpu
    1 | PC090 | 1080 | 2700X
    2 | PC040 | 1070 | R5 1600
    3 | PC066 | 1060 | i5-6600K

    Table Computernutzer:
    co_id | us_id
    1 | 1
    1 | 2
    2 | 2
    3 | 3


    So lese ich die Daten ins DataGridView, nur will ich nun das im DataGridView der Computer steht, mit den zugehörigen Komponenten,
    und bei jedem PC in der letzten Spalte der oder die Nutzer, falls mehr mit Komma getrennt, stehen.

    VB.NET-Quellcode

    1. Dim con as new oledbconnection(conn), cmd as new oledbcommand(Nothing, con)
    2. Dim reader as oledbdatareader
    3. cmd.commandtext = "SELECT * FROM Computer"
    4. con.open
    5. reader = cmd.executereader
    6. DataGridView1.Rows.Clear
    7. While reader.read
    8. DataGridView1.Rows.Add(reader("co_id"),
    9. reader("co_name"),
    10. reader("co_gpu"),
    11. reader("co_cpu"))
    12. End While
    13. Con.Close
    14. Reader.Close


    Für ein solches Ergebnis würde ich gerne eine query haben

    co_id | co_gpu | co_cpu | us_firstname
    1 | 1080 | 2700X | Michael, Peter
    2 | 1070 | R5 1600 | Peter
    3 | 1060 | i5-6600K | Jonas

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Independency“ ()

    für son Ergebnis gibts keine Query. Mehrere Namen in eine DGV-Zelle stecken gibt Sql nicht her.
    Mit 2 DGVs könnte man was basteln, wo links die Computer angezeigt sind, und rechts deren Nutzer.
    Aber da würde ich dringend empfehlen, dass du ein typisiertes Dataset verwendest, und Databinding.
    Wenn wolle gugge vier Views-Videos, um die Techgnologie malgesehen zu haben.