Laden...

Wie kann ich in Access eine Row aus dem DataGrid löschen?

Erstellt von Lucky_001 vor 3 Jahren Letzter Beitrag vor 3 Jahren 729 Views
L
Lucky_001 Themenstarter:in
15 Beiträge seit 2020
vor 3 Jahren
Wie kann ich in Access eine Row aus dem DataGrid löschen?

Hallo,
ich habe beim Löschen von einträgen in meiner MS Accses DB immer folgende Fehlermeldung: > Fehlermeldung:

Parallelitätsverletzung: Der DeleteCommand hat sich auf 0 der erwarteten 1 Datensätze ausgewirkt.

Habe inzwischen drei tage lang im Internet gesucht nach der lösung, habe aber leider keine lösung gefunden für dieses Problem.

Ich habe heuch mal den Code des "Löschen"-Buttons rein gepackt:


private void btn_delete_Click(object sender, EventArgs e)   // Einträge X bis Y löschen
        {
            AddProtokoll(Leuchte, "910", "Es wird versucht Leuchten zu löschen.");
            try
            {
                Passwort pass = new Passwort(Passw);
                if (pass.ShowDialog() == DialogResult.OK)
                {
                    foreach (DataGridViewRow row in dGV_main.SelectedRows)
                    {
                        dGV_main.Rows.RemoveAt(row.Index); 
                        this.TA.Update(this.DS.Leuchten); // Hier schlägt er den Fehler aus
                    }
                    AddProtokoll(Leuchte, "911", "Leuchten wurden erfolgreich Glöscht.");
                }
                else
                {
                    MessageBox.Show("Zugriff Verweigert!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    AddProtokoll(Leuchte, "! 912 !", "Löschen wurde verweigert!");
                }
            }
            catch (Exception ex)
            {
                AddProtokoll(Leuchte, ex.Data.ToString(), ex.Message);
            }
        }

Ich Danke für die antworten schonmal im vorraus.

MfG
Daniel S.

T
2.221 Beiträge seit 2008
vor 3 Jahren

Anhand des Codes kann dir niemand sagen was die Ursache ist, da der eigentliche SQL Part nicht gezeigt wird.
Ansonsten klingt der Code auch falsch, da du eine Update Methode aufrufst, die Meldung aber darauf hindeutet, dass ein Eintrag per DELETE gelöscht werden soll den es so nicht gibt.

Anbei solltest du MS Access nie als DB verwenden.
Es ist auch nicht als Anwendungsdaten gedacht.
Dafür nimmt man i.d.R. embedded Datenbanken wie Sqlite.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

3.825 Beiträge seit 2006
vor 3 Jahren

RemoveAt(row.Index) löscht die Zeile aus dem DataSet im Speicher und ändert nichts in der Datenbank.

Damit die Zeile in der Datenbank gelöscht wird musst Du die Zeile im DataSet als Gelöscht markieren, mit Update() wird dann die Zeile in der Datenbank gelöscht.

Zeile in der Datenbank löschen : row.Delete()

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

L
Lucky_001 Themenstarter:in
15 Beiträge seit 2020
vor 3 Jahren

Hi,

ich habe es jetzt geändert. Meintest du es so Bernd?


foreach (DataGridViewRow row in dGV_main.SelectedRows)
                    {
                        dGV_main.Rows.RemoveAt(row.Index);
                        this.DS.Leuchten.Rows[row.Index].Delete();
                        this.TA.Update(this.DS.Leuchten);
                    }

Weil das geht leider ebenfalls nicht.

Eine etwas ältere version hat 1:1 den selben Code, jedoch funktionierte sie.

Daniel S.

3.825 Beiträge seit 2006
vor 3 Jahren

foreach (DataGridViewRow row in dGV_main.SelectedRows) row.Delete();
this.TA.Update(this.DS.Leuchten);

RemoveAt löscht die Zeile aus dem DataSet, also wird sie nicht in der Datenbank gelöscht oder geändert.

Der Code kann so nicht funktioniert haben weil Du eine Zeile auf "Deleted" setzt die Du vorher entfernt hast. Das geht nicht.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

L
Lucky_001 Themenstarter:in
15 Beiträge seit 2020
vor 3 Jahren

Das row.Delete() geht nicht da es ja eine DatagridViewRow ist. ich mache immer this.DS.Leuchten.Rows[row.Index].Delete();

Allesdings gibt er jetzt wieder den selben fehler wie am anfang aus:> Fehlermeldung:

Parallelitätsverletzung: Der DeleteCommand hat sich auf 0 der erwarteten 1 Datensätze ausgewirkt.

Ich bin langsam echt am verzweifeln woran das noch liegen kann.

F
10.010 Beiträge seit 2004
vor 3 Jahren

Schon mal in die Doku geschaut, was Parallelitätsverletzung bedeutet??

Die Ausgangdsaten in deiner DataTable und die Daten in der DatenDatei ( Access ist keine Datenbank ) stimmen nicht mehr überein.

Das heißt in 99% der fälle, das du entweder ein falsches Update/Insert/Delete Statement generieren lässt, oder die Daten im DataSet sind nicht mehr gültig.

3.825 Beiträge seit 2006
vor 3 Jahren

Ich hatte nicht gesehen dass es eine ViewRow ist.

Der Fehler besagt dass die Zeile im Dataset nicht mehr in der Datenbank gefunden wurde.

Sie wurde z.B. inzwischen von einem anderen Benutzer geändert.

Ich hatte den Fehler mal bei MySQL weil dort Zahlen falsch gerundet wurden und so der CommandBuilder die Zeile nicht mehr gefunden hat.

Lösung : Parallelitätsverletzung

Im Zweifel die SQL Kommandos anschauen und eventuell selber schreiben.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

L
Lucky_001 Themenstarter:in
15 Beiträge seit 2020
vor 3 Jahren

Ich habe jetzt eines der Datenbank felder von Dezimal auf Intenger umgestellt. Jetzt läuft wieder alles!

Vielen Dank! 👍 🙂