Datensatz löschen (Master-Detail)

  • VB.NET

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

    Datensatz löschen (Master-Detail)

    Hallo Forum,

    als Neuling in der VB.net und SQL programmiereung hänge ich mal wieder an einem für mich unlösbaren Problem.
    In meinem Programm werden Werkzeuge verwaltet, die für den Einsatz auf unterschiedlichen Maschinen gedacht sind. Dabei kann ein Werkzeug mehreren Maschinen zugeordnet sein und eine Maschine mehrere Werkzeuge haben. Im diese n:m Beziehung abzubilden wurde die Hilfstabelle tblTisch_Masch_Hilf erstellt. Bei den in diesem Programmteil vrwendeten Werkzeugen handelt es sich im Aufnahmetische für Schleifmascghinen. Diese sind in der Tabelle tblTische abgelegt. Das Anlegen und nachträgliche Bearbeiten funktioniert mittlerweile, nur beim löschen eines Tisches incl. aller Maschinenzuordnungen komme ich nicht weiter.

    Aus dem Buch "Datenbank-Programmierung mit Visual Basic 2008" habe ich mir folgenden Code zusammengebastelt. Der aber nicht funktioniert!
    In der Zeile dim Tisch = test.....
    Kommt es zu folgender Fehlermeldung
    Fehler beim Anfügen einer automatisch benannten Datenbank für die Datei C:\Projektarbeit\Betriebsmittelverwaltung\Betriebsmittel\Betriebsmittel\bin\Debug\bin\Debug\Betriebsmittel.mdf. Eine Datenbank mit diesem Namen ist bereits vorhanden, die angegebene Datei kann nicht geöffnet werden, oder sie befindet sich in der UNC-Freigabe.

    Irgendwie verstehe ich das mit dem DataContext nicht!!!!!!


    Hier der Code der SUB zum löschen eines Datensatzes.

    Wer kann mir hier weiterhelfen??????

    Gruß
    Fuige


    VB.NET-Quellcode

    1. Private Sub btnLoeschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoeschen.Click
    2. If TblTischeBindingSource2.Count > 0 Then
    3. Dim msg As String = "Den Tisch " & TblTischeBindingSource2(DataGridView1.CurrentRow.Index)("WerkzeugNr").ToString & "wirklich löschen?"
    4. Dim cpt As String = "Tisch löschen"
    5. If (MessageBox.Show(msg, cpt, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
    6. Dim test As New TischeDataContext()
    7. For Each row As DataGridViewRow In DataGridView1.SelectedRows
    8. 'Variable um die selektierte WerkzeugNr zu übergeben
    9. Dim var As String
    10. var = CInt(Fix(row.Cells(0).Value))
    11. Dim Tisch = test.tblTische.Where(Function(t) t.WerkzeugNr = var).First()
    12. test.tblTisch_Masch_Hilf.DeleteAllOnSubmit(Tisch.tblTisch_Masch_Hilf)
    13. test.tblTische.DeleteOnSubmit(Tisch)
    14. Next
    15. ' 'Datensatz aus dem DataGridView löschen
    16. ' TblTisch_Masch_HilfBindingSource1(TblTisch_Masch_HilfDataGridView.CurrentRow.Index).delete()
    17. ' Me.TblTisch_Masch_HilfDataGridView.EndEdit()
    18. ' Me.TblTisch_Masch_HilfBindingSource1.EndEdit()
    19. ' Me.TblTisch_Masch_HilfTableAdapter.Update(Me.DataSet1.tblTisch_Masch_Hilf)
    20. ' TblTischeBindingSource2(DataGridView1.CurrentRow.Index).delete()
    21. ' 'gelöschten Datensatz wirklich aus der DB entfernen
    22. ' Me.DataGridView1.EndEdit() ' schreibt Änderung in Cell
    23. ' Me.TblTischeBindingSource2.EndEdit() ' schreibt Cell in DataRow
    24. ' Me.TblTischeTableAdapter.Update(Me.DataSet1.tblTische) ' schreibt DataRow in Datenbank
    25. 'Else
    26. ' MessageBox.Show("Tisch wurde NICHT gelöscht!", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
    27. End If
    28. End If
    29. End Sub
    Scheint so, als würdest du die Datenbank in einer vorherigen Funktion öffnen, aber nicht schließen und versuchst eine neue Connection aufzubauen. Schließe am Ende der Funktion, an der die Datenbank geöffnet wird immer mit einem [Connection].Close()
    Hi!

    Habe mir mit
    Private conn As New SqlConnection(DB_Verbindungs_String)
    eine Vraiable erstellt um die Verbindung zu öffen und schließen. Beim Durchsuchen des Programms kann ich kein conn.open() ohne späteres conn.close() finden.
    Der Verbindungsstring ist in den Settings hinterlegt.
    Meintest Du das?
    In den Settings meines Projektes gab es einen zweiten Connectionstring. Wurde scheinbar automatisch erstellt als ich den Linq Designer verwendet habe.
    Nachdem ich diesen zweiten String gelöscht hab kommt keine Fehlermeldung. Es wird aber auch nichts gelöscht.

    Ne Idee woran's liegen könnte?
    Im oben genannten Buch hab ich die Lösung gefunden.

    Die Delete Befehle alleine führen nicht zu einer Änderung in der Datenbank.
    Erst mit dem Befehl

    test.SubmitChanges()

    werden die Änderungen in die Datenbank geschrieben.


    Metakilla, vielen Dank für Deine Hilfe.