Announcement

Collapse
No announcement yet.

DataSet (Designer), DataSource und ForeignKey in 2ter Hirachie

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataSet (Designer), DataSource und ForeignKey in 2ter Hirachie

    Hallo Zusammen,

    schon oft hat mir dieses Forum weitergeholfen nun steh ich jedoch vor einem Problem das ich nicht in einen Suchmaschinenbegriff bundeln kann. Deshalb hab ich mich jetzt endlich hier in diesem Forum angemeldt.

    Aufbau:



    tbl_Person
    ID | Name
    1 | Schmidt

    tbl_Fima
    ID | Name
    1 | Schmidt´s Schmide


    tbl_Standort (<- wie Werk)
    ID | Firma_ID | Name
    1 | 1 | Schmidtshausen

    tbl_MitarbeiterTyp
    ID | Name
    1 | Angestellter

    tbl_Mitarbeiter
    ID | Person_ID | Standort_ID | MitarbeiterTyp_ID
    1 | 1 | 1 | 1



    So nun möchte ich in einem DataGridView die Tabelle tbl_Mitarbeiter darstellen, jedoch soll diese nicht nur Person | Standort | MitarbeiterTyp darstellen sondern Person | Firma - Standort | MitarbeiterTyp.

    Ich habe dies folgendermaßen unschön bereits umgesetzt:
    - tbl_Firma komplett in DataSource laden
    - tbl_Standort komplett in DataSource laden
    - tbl_Standort Datensatz mit Standort_ID aus tbl_Mitarbeiter suchen
    - Firma_ID aus tbl_Standort in Variable
    - tbl_Firma Datensatz mit Variable suchen
    - aus beiden (tbl_Firma und tbl_Standort) Current-Datensätze die Namen auslesen und zusammenfügen.

    Hmmm... :/ gefällt mir gar nicht.

    Kennt evtl einer eine bessere/simplere Lösung?

    MfG Christian

    P.S. ich hoffe Ihr versteht mein Problem

  • #2
    Hallo Christian und willkommen!

    Dein Ansatz ist vollkommen korrekt: passende DataTables in einem DataSet erzeugen und Nachschlagetabellen komplett laden.

    Diese Schritte können "sofort" beim Laden des Formulars bzw. des DataSet erledigt werden. Die einzelnen Mitarbeiter sollten erst dann geholt werden, wenn sie wirklich benötigt werden. Genauso wie in der DB mit ForeignKeys gearbeitet wird, solltest du im DataSet DataRelations definieren.

    Da ich annehme, dass die Mitarbeiter-ID in der Verknüpfungstabelle Mitarbeiter eindeutig ist, geht das dann einfach wie folgt:

    * automatisch beim Laden des DataSet:
    1. tbl_Firma komplett in DataTable laden
    2. tbl_Standort komplett in DataTable laden
    3. tbl_MitarbeiterTyp komplett in DataTable laden
    4. tbl_Person komplett in DataTable laden (das gefällt mir nicht so sehr, erleichtert aber die Suche nach der Person-ID)

    * manuell beim Suchen nach einem Mitarbeiter
    5. die Person-ID bestimmen (entweder durch Auswahl aus der vierten DataTable oder durch ein SELECT nach Name)
    6. per SELECT den Datensatz aus tbl_Mitarbeiter in die DataTable einlesen

    Die letzte DataTable wird direkt zur Anzeige benutzt. Durch die DataRelations stehen automatisch alle verknüpften Daten zur Verfügung. Genaueres siehe z.B. DataGridView: Master/Detail über ComboBox. Die Arbeitsanleitung steht im ersten Beitrag; wichtige Korrekturen kommen gegen Ende von ErfinderDesRades und mir (juetho).

    Gruß Jürgen

    PS. DataSource ist die Eigenschaft, die bei Controls zur Datenbindung verwendet wird. Der Daten-Container als Teil des DataSet heißt DataTable.

    Comment


    • #3
      Hallo,

      es scheint so, als ob es dir nur um die Anzeige geht und du im DataGridView nichts ändern möchtest. Was würde also dagegen sprechen die Daten direkt im SQL Befehl zu joinen und das Ergebnis anzuzeigen. Dann brauchst du die Daten nicht in deinem Programm noch weiter verarbeiten.

      Kommt dann natürlich auf deine Datenbank an. In Oralce würde das dann etwa so aussehen:

      Code:
      select tbl_person.name,
             tbl_firma.name || ' - ' || tbl_standort.name,
             tbl_miterbeitertyp.name
      from tbl_mitarbeiter
      inner join tbl_person on tbl_mitarbeiter.person_id = tbl_person.id
      inner join tbl_standort on tbl_mitarbeiter.standort_id = tbl_standort.id  
      inenr join tbl_firma on tbl_standort.firma_id = tbl_firma.id
      (Bitte entschuldige, wenn da ein Fehler drin ist, habs nur so eben im notepad geschrieben)

      Gruß

      JenneB

      Comment


      • #4
        Vielen Dank für die Info´s,

        denn werd ich es mal so lassen wie es bisher läuft. Ich wollte eigenltich verhindern, dass ich die kompletten Tables laden muss. Da dieses Programm auch über das I-Net laufen muss.

        @JenneB
        Wenn ich eine Abfrage aus SQL lade muss ich um diese wieder bearbeiten zu können schlussendlich doch wieder die Tabels komplett einzeln laden.

        Trotzdem vielen Dank!


        Ich wünsche noch einen angenehmen Tag!

        Comment

        Working...
        X