Was muss ich beachten, wenn ich Daten aus verknüpften Tabbelen lösche?

  • VB.NET

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

    Was muss ich beachten, wenn ich Daten aus verknüpften Tabbelen lösche?

    Hey Leutz ich hätte da mal wieder eine Frage. Ich arbeite mit verknüpften Tabellen. Nun habe ich eine Tabelle (Tabelle1) diese besitzt eine ChildTabelle (Tabelle2). Tabelle2 hat auch eine Child (Tabelle3). Also Tabelle2 hat eine Parent und eine Childtabelle. Die Lösch-Regel bei allen Beziehungen ist auf Cascade. Nun meine frage: Wie bekomme ich es hin, dass ich einen Datensatz aus Tablle2 löschen kann und alle darauf bezogenen aus Tabelle3 jedoch keinen aus Tabelle1. Mein Bisheriges vorgehen ist, die Datarow aus der Datatable von Tabelle2 zu löschen (Funktionier auch: Geprüft durch rows.count) und dann ein Update mit dem Tableadaptermanager durchzuführen. Es kommt keine Fehlermeldung, jedoch bleiben alle Datensätze auf der Datenbank vorhanden.

    Hoffe ihr könnt mir helfen:-)

    Euer Steak

    T-BoneSteak schrieb:

    und dann ein Update mit dem Tableadaptermanager durchzuführen.
    Das ist erstmal nicht erforderlich, sofort zu tun.
    Du kannst jederzeit mittm TableAdaptermanager alle Änderungen speichern.
    Es gibt normal keinen Grund, die eine Zeilen-Löschung direkt an einen Datenbank-Zugriff zu koppeln - ist meist veraltete Denke, solch zu tun.
    Der Witz an Ado.Net ist, dass die Daten von der DB entkoppelt verarbeitet werden.
    Ich hab immer einen Save-Button, da kann der User speichern, wannerwill, und im FormClosing ausserdem eine Abfrage, falls Änderungen vorhanden sind, ob er die gespeichert haben will.
    Und jetzt beruhigen wir uns und kommen wieder auf das Topic zurück. Danke.

    Lg, Solaris


    @T-BoneSteak: Wenn dein Thema erledigt ist, poste die Lösung doch bitte hier. Falls nicht, setze das Thema bitte wieder auf offen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

    Konnte das Problem folgendermaßen lösen:

    VB.NET-Quellcode

    1. Dim rwCurrent = DirectCast(DirectCast(TableBindingSource.Current, DataRowView).Row, DataSet.TableRow)
    2. rwCurrent.Delete()


    Weis nicht ob das der beste Weg ist, aber die Row wird aus dem Datatable gelöscht und wenn man mit dem Updatemanager ein UpdateAll ausführt, wird auch die Cascade-Einstellung berücksichtigt. Für meine Zwecke vollkommen ausreichend.
    Dieser Zugriff:

    VB.NET-Quellcode

    1. Dim rwCurrent = DirectCast(DirectCast(TableBindingSource.Current, DataRowView).Row, DataSet.TableRow)
    ist prinzipiell super, denn damit holst du dir eine typisierte Datarow, und damit lässt sich jegliche mögliche Datenverarbeitung in typisierter Manier coden - s. auf vier Views-Videos den entsprechenden Film, gugge auch Daten laden und speichern

    Allerdings in diesem Simpel-Spezialfall hätte ein BindingSource.RemoveCurrent() es auch getan.
    Woher ich diese Methode kenne?
    Nun, ich browse immer im ObjectBrowser :D VisualStudio richtig nutzen (Google ist nicht deine Mami)