Announcement

Collapse
No announcement yet.

Bearbeitung von mehreren Tabellen im DataGridView

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

  • Bearbeitung von mehreren Tabellen im DataGridView

    Hallo Gemeinde. Mich beschäftigt schon seit Längerem ein Problem:
    Ich möchte Daten aus mehreren Tabellen in einem Datagridview bearbeiten. Das Laden mittels SQL stellt dabei überhaupt kein Problem dar, z.B.:
    "SELECT p.id, p.nachname, p.vorname, p.strasse, p.nr, p.ida, a.plz, a.ort, a.ortsteil FROM personen p, adressen a WHERE p.ida = a.id".
    Dieser Select läßt sich wunderbar am Bildschirm darstellen und auch bearbeiten. Leider folgt jetzt das Problem, geänderte Daten wieder in die Datenablage zu schreiben. Momentan löse ich das Problem, indem ich den entsprechenden Datensatz als Extratabelle zusätzlich in den Arbeitsspeicher lade, die entsprechenden Änderungen übernehme und wieder abspeichere. Ist allerdings ein Wahnsinnsaufwand -> und das geht doch auch bestimmt eleganter!!
    Einzige Einschränkung bei der Lösung dieses Problems ist, dass meine Abnehmer alle diese Daten auch in einer Tabellenansicht haben wollen!

    Dies ist mein erster Foreneintrag überhaupt, also enttäuscht mich nicht!

  • #2
    Wenn du mit deinem SQL eine DataTable gefüllt hast und die an ein DatagridView gebunden hast kannst du nach dem ändern die Datatable einfach über eine DataAdapter/Tableadapter wieder in die Datenbank zurückspielen.
    Wo, wie und warum brauchst du eine ~Extratabelle~?

    Comment


    • #3
      Leider lässt sich eine Datatable, die auf mehreren Tabellen in der Datenbank basiert NICHT speichern! Genau hier ist mein Problem. Funktioniert auch mit JOIN-Abfragen nicht!

      Comment


      • #4
        Automatisch nicht mit 100% Sicherheit möglich und wird darum auch nicht von ADO.Net angeboten.

        Du musst zumindest das SQL zum update, insert, delete im Dataadapter/Tableadapter selber schreiben da aus dem Join die nicht automatisch bestimmbar sind.

        Comment


        • #5
          Könntest du mir einen solchen UpdateCommand zu meinem obigen Select zusammenbasteln? Ich habe bisher noch keine Möglichkeit gefunden zu zwei Tabellen eine Aktionsabfrage zusammenzustellen.

          Comment


          • #6
            Wenn ich es automatisch aus deinem SQL könnte könnte es ADO.Net auch Es geht darum das zusätzliche Informationen fehlen die man nicht automatisch ermitteln kann.

            z.B. Ist Person-Adressen eine 1:1 oder eine 1:N Beziehung?
            Wenn es eine 1 zu N Beziehung ist werden Vor- und Nachname einer Person mehrmals im Grid angezeigt. Was soll dann bei konkurrierenden Änderung an der Person passieren?

            Wenn man in einem Datensatz alle Felder der Adresse löscht soll dann die Adresse gelöscht werden(Delete) oder weil es ja eigentlich eine Update Operation doch nur ein Update?

            Beim löschen - was soll zuerst gelöscht werden Adresse oder Person? Oder nur Adresse weil an der Person noch andere Adressen hängen und Person eh nicht löschbar wäre(referenzielle Integrität).

            Es gibt noch N andere Randbedingungen die nur der Festlegen kann der die Anwendung schreibt und Fachwissen über das Datenmodell hat. Rein technisch und damit automatisch ist das nicht möglich.

            Comment


            • #7
              Originally posted by Ralf Jansen View Post
              Wenn ich es automatisch aus deinem SQL könnte könnte es ADO.Net auch Es geht darum das zusätzliche Informationen fehlen die man nicht automatisch ermitteln kann.
              Genau da liegt das Problem!

              Originally posted by Ralf Jansen View Post
              z.B. Ist Person-Adressen eine 1:1 oder eine 1:N Beziehung?
              1:n

              Originally posted by Ralf Jansen View Post
              Wenn es eine 1 zu N Beziehung ist werden Vor- und Nachname einer Person mehrmals im Grid angezeigt. Was soll dann bei konkurrierenden Änderung an der Person passieren?
              Nicht ganz korrekt: Die Personen werden nur einmal angezeigt, die Orte könnten mehrfach angezeigt werden

              Originally posted by Ralf Jansen View Post
              Wenn man in einem Datensatz alle Felder der Adresse löscht soll dann die Adresse gelöscht werden(Delete) oder weil es ja eigentlich eine Update Operation doch nur ein Update?
              Die Adresse (oder eigentlich ja nur die Orte) sollen nicht gelöscht werden, da es sich hier um eine Katalogtabelle handelt.

              Originally posted by Ralf Jansen View Post
              Beim löschen - was soll zuerst gelöscht werden Adresse oder Person? Oder nur Adresse weil an der Person noch andere Adressen hängen und Person eh nicht löschbar wäre(referenzielle Integrität).
              Ein Löschen von Personen ist ebenfalls - zumindest in dieser Ansicht - nicht vorgesehen. Ich möchte nur einen UpdateCommand für geänderte Daten, sowohl Personen, als auch Adressdaten erstellt haben.

              Originally posted by Ralf Jansen View Post
              Es gibt noch N andere Randbedingungen die nur der Festlegen kann der die Anwendung schreibt und Fachwissen über das Datenmodell hat. Rein technisch und damit automatisch ist das nicht möglich.
              Die Randbedingungen dürften für den UpdateCommand eigentlich nicht von Belang sein... Die ParameterCollection erstelle ich auch selbst. Mir fehlt, wie schon mehrfach erwähnt, nur der UpdateCommand!

              Comment


              • #8
                Ach ja: Wenn ein Ort geändert wurde (z.B. wurde ein Ortsteil hinzugefügt) soll natürlich bei allen anderen Orten mit der gleichen OrtsID in der Datagridview dieser Ortsteil auch angezeigt werden!

                Comment


                • #9
                  Person-Adresse ist also N:1 ? An einer Adresse Ort befinden sich mehrere Personen? Aber Adresse soll auch über diese Ansicht änderbar sein nicht nur Personendaten?

                  Wenn es eine 1 zu N Beziehung ist werden Vor- und Nachname einer Person mehrmals im Grid angezeigt. Was soll dann bei konkurrierenden Änderung an der Person passieren?
                  Nicht ganz korrekt: Die Personen werden nur einmal angezeigt, die Orte könnten mehrfach angezeigt werden
                  Ok dann drehe ich das Beispiel herum wenn ich an zwei Personen die an der selben Adresse hängen die Adresse unterschiedliche andere welche soll dann in die Datenbank geschrieben werden.?

                  Die Randbedingungen dürften für den UpdateCommand eigentlich nicht von Belang sein... Die ParameterCollection erstelle ich auch selbst. Mir fehlt, wie schon mehrfach erwähnt, nur der UpdateCommand!
                  Natürlich sind die von Belang. Du hast ja in deinem letzten Post schon ein paar klar gestellt. Alles Wissen das sich nicht einfach aus deinem gegebenen Select Statement erschließen lässt.

                  [Highlight=SQL]update personen Set nachname = ?, vorname = ?, strasse = ? WHERE ida = ?;
                  update adressen Set plz= ?, ort= ?, ortsteil = ? WHERE id = ?[/Highlight]

                  Welches konkrete Platzhalterzeichen(hier ?) und welches Trennzeichen(hier ; ) benutzt werden muss hängt von der konkret benutzten Datenbank und Zugriffstechnik(OLEDB, ODBC, nativ) ab.

                  Ich glaube aber das du hierbei über ein paar noch nicht ausgesprochene Randbedingungen fallen wirst. Wäre das ganze nicht besser in einer klassischen Master-Detail Ansicht aufgehoben? Wenn es unbedingt in einem Control sein soll kann man ja ein Grid verwenden das das von Haus aus unterstützt.

                  Comment


                  • #10
                    Prima. Mit dem Update kann ich vielleicht sogar was anfangen. Ich hatte mich eher auf ein Update-Statement in einem Befehl konzentriert. Sieht scheinbar einfacher aus als ich dachte. Ich mache mich gleich mal ans Werk.

                    Wenn es unbedingt in einem Control sein soll kann man ja ein Grid verwenden das das von Haus aus unterstützt.
                    An welches Grid im Framework denkst du dabei?

                    Comment


                    • #11
                      Entschuldigung. Ich wollte nicht unhöflich sein. Du hattest oben eine Rückfrage gehabt:

                      Wenn es eine 1 zu N Beziehung ist werden Vor- und Nachname einer Person mehrmals im Grid angezeigt. Was soll dann bei konkurrierenden Änderung an der Person passieren?
                      Nicht ganz korrekt: Die Personen werden nur einmal angezeigt, die Orte könnten mehrfach angezeigt werden
                      Ok dann drehe ich das Beispiel herum wenn ich an zwei Personen die an der selben Adresse hängen die Adresse unterschiedliche andere welche soll dann in die Datenbank geschrieben werden.?
                      Die Adressen hängen eigentlich in der Personentabelle mit drin. Ausnahme ist der Ortskatalog. Sollte sich eine Änderung z.B. im Ortsteil, im Ortsnamen oder auch in der Postleitzahl ergeben, würde dieser Eintrag natürlich in der Ortetabelle gespeichert werden und künftig für alle Personen, die im gleichen Ort wohnen, aktualisiert mit ausgegeben werden.

                      Comment


                      • #12
                        An welches Grid im Framework denkst du dabei?
                        Aus dem Framework keins. Es gibt aber reichlich Auswahl bei anderen Herstellern(DevExpress, Infragistics, Telerik oder einer der anderen üblichen Verdächtigen).

                        Die Adressen hängen eigentlich in der Personentabelle mit drin. Ausnahme ist der Ortskatalog. Sollte sich eine Änderung z.B. im Ortsteil, im Ortsnamen oder auch in der Postleitzahl ergeben, würde dieser Eintrag natürlich in der Ortetabelle gespeichert werden und künftig für alle Personen, die im gleichen Ort wohnen, aktualisiert mit ausgegeben werden.

                        Ein Beispiel

                        Code:
                        nachname  vorname  ida  plz    ort        ortsteil 
                        Jansen    Ralf     1    40210  Düsseldorf Derendorf
                        Kyr       rho      1    40210  Düsseldorf Derendorf
                        wir befinden also erstmal beide am selben Ort

                        Code:
                        nachname  vorname  ida  plz    ort        ortsteil 
                        Jansen    Ralf     1    40210  Düsseldorf Oberkassel
                        Kyr       rho      1    40210  Düsseldorf Pempelfort
                        jetzt ziehen wir um. Ich nach Oberkassel du nach Pempelfort.
                        Wessen update auf die Adresse mit ida 1 soll denn jetzt ziehen? In der Datenbank kann es den Datensatz ja nur einmal geben außer du baust jetzt zusätzliche Intelligenz ein.

                        Comment


                        • #13
                          Aus dem Framework keins. Es gibt aber reichlich Auswahl bei anderen Herstellern(DevExpress, Infragistics, Telerik oder einer der anderen üblichen Verdächtigen).
                          Habe mich bisher tatsächlich nur mit Frameworkkomponenten auseinandergesetzt. Daher kenne ich mich auch nicht im Kreise der 'Verdächtigen' aus. Ich werde aber mal recherchieren, ob ich unter den angegebenen Anbietern was brauchbares finde.



                          Ein Beispiel

                          Code:
                          nachname  vorname  ida  plz    ort        ortsteil 
                          Jansen    Ralf     1    40210  Düsseldorf Derendorf
                          Kyr       rho      1    40210  Düsseldorf Derendorf
                          wir befinden also erstmal beide am selben Ort

                          Code:
                          nachname  vorname  ida  plz    ort        ortsteil 
                          Jansen    Ralf     1    40210  Düsseldorf Oberkassel
                          Kyr       rho      1    40210  Düsseldorf Pempelfort
                          jetzt ziehen wir um. Ich nach Oberkassel du nach Pempelfort.
                          Wessen update auf die Adresse mit ida 1 soll denn jetzt ziehen? In der Datenbank kann es den Datensatz ja nur einmal geben außer du baust jetzt zusätzliche Intelligenz ein.
                          Berechtigte Frage. Bei einem Umzug müsste sich natürlich die ID ändern! Und wenn wir beide umziehen, ändert sich bei uns beiden die ID, weil ja alle anderen, die vorher auch am gleichen Ort gewohnt haben, in Derendorf wohnen bleiben.

                          Comment

                          Working...
                          X