Eintrag löschen und verschieben gleichzeitig

  • VB.NET
  • .NET 5–6

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Typhoon.

    Eintrag löschen und verschieben gleichzeitig

    Hallo liebes Forum

    Wiedereinmal einespezielle frage bei der ich nicht weiterkommen.

    Wie kann ich einen Eintrag von der tbl_tasks in die tbl_completed_tasks verschieben und dann aus der tbl_tasks löschen mit einem Button-klick?

    Sprich in einer Aufgabenliste steht z.B. Reinigen der Filter. Wurde das erledigt kann man es aus der Liste löschen wird aber in eine andere Liste (Erledigte Aufgaben) kopiert/verschoben.

    Gruß Gebhard
    Hallo,

    ich habe die Lösung selber herausgefunden.

    Hiermit wird beim drücken des Buttons die Aufgabe aus der Liste (tbl_tasks) in Liste (tbl_completed_tasks) kopiert und danach aus der Liste (tbl_tasks) gelöscht.

    Hier der Code:

    VB.NET-Quellcode

    1. Imports MySql.Data.MySqlClient
    2. Public Class FormLöscheAufgaben
    3. Public adapter As New MySqlDataAdapter
    4. Public cmd As New MySqlCommand
    5. Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
    6. Dim ds As DataSet
    7. Dim i As Integer
    8. Dim currentid As String
    9. Dim currentuser As String
    10. Dim currentdatum As Date
    11. Dim current_completed_task_name As String
    12. If txtPassword.Text = "xxx" Then
    13. i = FormToDoListe.DataGridView1.CurrentRow.Index
    14. currentid = FormToDoListe.DataGridView1.Item(0, i).Value.ToString()
    15. currentuser = FormToDoListe.DataGridView1.Item(1, i).Value.ToString()
    16. currentdatum = FormToDoListe.DataGridView1.Item(2, i).Value.ToString()
    17. current_completed_task_name = FormToDoListe.DataGridView1.Item(3, i).Value.ToString()
    18. ds = New DataSet
    19. cmd = New MySqlCommand("INSERT INTO tbl_completed_tasks (user, datum, completed_task_name) VALUES (@user, @datum, @completed_task_name)", Conn)
    20. cmd.Parameters.AddWithValue("user", currentuser)
    21. cmd.Parameters.AddWithValue("datum", currentdatum)
    22. cmd.Parameters.AddWithValue("completed_task_name", current_completed_task_name)
    23. cmd.ExecuteNonQuery()
    24. adapter = New MySqlDataAdapter("DELETE FROM tbl_tasks WHERE id = " & currentid, Conn)
    25. adapter.Fill(ds, "tbl_tasks")
    26. txtPassword.Clear()
    27. My.Application.Log.WriteEntry("Eine Aufgabe wurde erledigt, '" & DateString & "', '" & TimeString & "'", TraceEventType.Information, 1)
    28. Close()
    29. Else
    30. Try
    31. Throw New Exception("Fehler: ")
    32. Catch ex As Exception
    33. MessageBox.Show("Falsches Passwort", "ACHTUNG!!!", MessageBoxButtons.OK)
    34. My.Application.Log.WriteException(ex, TraceEventType.Critical, "Falsches Passwort wurde eingegeben, '" & DateString & "', '" & TimeString & "'", 4)
    35. End Try
    36. End If
    37. End Sub
    38. End Class
    MonDieu!
    Natürlich kann man keine AufgabenListeRow verschieben in eine ErledigteAufgabenDataTable, weil in ErledigteAufgabenDataTable sind ErledigteAufgabenDataRows, und das ist ein anderer Datentyp.

    Aber:
    Mit DataRow.Delete löscht man einen Datensatz und mit DataTable.Add - nawaswohl?

    Edit: zuspät
    Hallo

    Vielleicht habe ich mich falsch oder gar komplett falsch ausgedrückt. Oder ich habe deinen Beitrag @ErfinderDesRades falsch verstanden.

    Ich schreibe in meine Form (Zu erledigede Wartungsarbeiten Druckerei) ein Aufgabe.



    Ist die Aufgabe erledigt, wird diese Markiert und mit dem Button "Aufgabe erledigt" aus dieser Liste gelöscht und dann in die Form (ToDoListeErledigt) geschrieben.

    Selbiges gilt dann auch in der DB. Aus der (tbl_tasks) wird der Eintrag gelöscht und in die (tbl_completed_tasks) geschrieben.



    Was hältst Du von einer anderen Lösung. Füge einfach einen Statusspalte zur Tabelle, über die Du steuerst, ob die Aufgabe offen oder erledigt ist. Mit einem Filter kannst Du Dir dann den einen oder anderen Teil anzeigen lassen.
    BTW man hat dann auch noch mehr Möglichkeiten für unterschiedliche Stati, z.B. offen, zurückgestellt, erledigt, verschoben ...
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Du verknüpfts eine neue Tabelle Status mit der Tabelle tbl_task und ziehst Dir dann so den Status.
    Tabelle Status
    IDWert
    1offen
    2erledigt

    Tabelle tbl_task
    IDWerDatumAufgabeStatusID
    1Grisu
    A2
    2Patrik
    B1
    3Gebi
    C1

    Mit diem SQL bekommst Du alle offen Tasks

    SQL-Abfrage

    1. SELECT * FROM tbl_task WHERE StatusID=1

    und hier die erledigten

    SQL-Abfrage

    1. SELECT * FROM tbl_task WHERE StatusID=2
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    INOPIAE schrieb:

    Mit diem SQL bekommst Du alle offen Tasks
    [...]
    und hier die erledigten
    [...]
    genau. Der Witz ist: du bekommst die Aufgaben nicht aus verschiedenen Tabellen, sondern aus ein und derselben.
    Dann musste keine Datensätze aus der einen Tabelle "verschieben" (was ja garnicht geht) in eine andere, sondern es gibt nur eine Tabelle: Aufgabe.
    Statt "verschieben" einfach nur den Status ändern.

    Relational denken!
    Wie im richtigen Leben!: Eine Aufgabe ist und bleibt dieselbe. Ist sie erledigt, ist sie halt erledigt. Sie ist deswegen immer noch dasselbe: eine Aufgabe (erledigt halt)

    Lerne relationale Datenmodellierung - es ist eine Denkweise.
    Im Datenbank-Tut-Bereich gibts ein Grundlagen-Tut dazu , zumindest zu einem weiteren Aspekt vons das.