gelöst: Datensatz löschen

  • Moin zusammen.
    In den Zeilen 216 bis 225 möchte ich folgendes erreichen:
    Ich wähle in der Listview einen Datensatz aus. Er ist dann ja blau hinterlegt. Nun sollen, wenn ich den Datensatz ausgewählt haben und ich auf Button19 (Löschbutton) drücke, der Datensatz gelöscht und das Listview neu eingelesen werden.

    Wie bekomme ich die ID von dem Datensatz, um damit zu arbeiten???

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    2 Mal editiert, zuletzt von Alina (15. Dezember 2015 um 22:34)

  • Das hier sollte helfen:

    AutoIt
    $sel=_GUICtrlListView_GetSelectedIndices($Listview)
    if $sel<>-1 then
        ;Wenn du Mehrfachauswahl erlaubst musst du hier $sel noch splitten (|)
        _GUICtrlListView_GetItemText($Listview,$sel,0)
        _SQLite_Exec($hDatabase,"Delete * from Buchverwaltung where id='"&$sel&"'")
        _GUICtrlListView_DeleteItem($Listview,$sel)
    endif
  • Hallo Kanashius.

    So in der Form hatte ich es ja überlegt, doch das Problem ist, wenn ich so einen DS lösche
    und dann einen neuen DS speichere, kommen alle DS noch einmal ins ListView und das incl.
    den gelöschtten.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • @RR04, das Problem mit dem im Beitrag-4 genannten ist jedoch auch so nicht behoben.
    Es wird in der Listview gelöscht, aber nicht in der Datenbank, denn wenn ich nach dem löschen neu starte oder einen neuen DS dazu gebe, kommen alle zuvor gelöschte DS's wieder ins ListView.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • @Lina,
    wenn Du neu startest werden Deine übungsdaten neu eingegeben!?

    Zur Probe lasse ich den Datensatz 5 löschen - Alles OK !

    AutoIt
    Func _DsDelete()
    ;~ ### zB. Datensatz 5 wird gelöscht ###
    	_SQLite_Exec(-1, "DELETE From Buchverwaltung WHERE ROWID = 5")
    	_ListViewFill()
    EndFunc   ;==>_DsDelete
  • Hallo RR04 und alle Lesenden.

    Genau das ist ja mein Problem. Mit einem festen Datensatz, wie Du es gezeigt hast mit DS 5 geht es ja und das habe ich auch hinbekommen, aber halt nicht, das es auch in der DB gelöscht wird.
    Er löscht es aus dem ListView, aber sobald man danach einen neuen DS eingibt oder die Tabelle neu startet, sind alle DS wieder da. Ich habe den Script nun so hier gepostet, wie ich ihn gerade getestet habe. Sieht wie folgt aus:

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Also löschen tut er, aber immer den DS davor und das zeigt er auch in der MSgBox an. Habe es dann auf "+1" gestellt, bringt aber auch nichts.

    Dann mache er es nur richtig, wenn man KEIN neuen DS eingefügt hat und auch da mal ja mal nein und es folgt wirres löschen, d. h. er löscht nicht was er soll.

    Ich blicke da nicht mehr durch. :( :( :(

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Löschen sollte nie über den Index in der Listview und dem X-Ten Eintrag in der Tabelle gehen.
    Alina hat eine eindeutige ID in ihrer Datenbank. Also sollte man diese auch nutzen.
    Diese wird also mit ausgelesen und in eine unsichtbare Spalte in die ListView gepackt (vorzugsweise in die erste Spalte).
    Mit dieser ID sollte dann auch gelöscht werden. Dann treten auch keine Nebeneffekte ,... auf.

    AutoIt
    ;Du fragst hier die ID ab. Machst aber nichts damit.
    _GUICtrlListView_GetItemText($Listview,$sel,0)
    ;stattdessen löscht du hier wieder den Datensatz mit dem Selektionsindex:
    _SQLite_Exec(-1,"Delete * from Buchverwaltung where id='"&$sel&"'")
    ;Muss aber so aussehen:
    $id=_GUICtrlListView_GetItemText($Listview,$sel,0)
    _SQLite_Exec(-1,"Delete * from Buchverwaltung where id='"&$id&"'")
    ;Der Listviewindex hat ja an sich nichts mit der Datenbankid zu tun, gerade, da Alina auch eine sortierfunktion eingebaut hat, die die Listview mischt.

    Dementsprechend wird die ROWID hier:
    "SELECT ROWID,* FROM Buchverwaltung;"
    Nicht benötigt.

  • Habe es nun genauso gemacht wie von Dir beschrieben, aber wie im PN-Talk bereits mitgeteilt, ist das auch nicht das was ich dachte. Löschen? Und wenn er löscht, dann nicht den DS der gesünscht ist.
    Wie das Bild ja auch zeigt, wird eine andere Zeile angezeigt, die gelöscht wird und dann auch noch, das er mal dann eine Zeile löscht und mal nicht. Und "Ja", alles auf dem gleichen PC und auch auf verschiedene PC's getestet.

    Und das ich dann sage: "Okay, bekomme ich nicht selber hin, da mir Hilfe, SuFu, andere Foren und und nicht geholfen hat, gebe ich es kostenpflichtig ab. Das Lösung finden. Und danach werde ich das fertig Script, wie damals beim Arrayproblem so lange auseinander nehmen, bis ich es verstehe und selber umsetzen kann. Danke an K..., für das besprochene und Du weiß was ich meine.

    ahl_sql_ss_001.jpg

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • So jetzt aber, versuch es mal!
    Ich mache das mit Wiedervorlage in die Inputfelder und der Nutzer hat noch einmal Zeit zum Überlegen (in Zeile verrutscht). Jetzt brauche ich die ID nur aus dem Inputfeld auslesen.

    AutoIt
    ; DS löschen
    Func _DsDelete()
    	$electionMark = _GUICtrlListView_GetSelectionMark($ListView)
    	MsgBox(0, "", $electionMark)
    	$ItemText = _GUICtrlListView_GetItemText($ListView, $electionMark)
    	MsgBox(0, "", $ItemText)
    	_SQLite_Exec(-1, "DELETE From Buchverwaltung WHERE ID = " & $ItemText & "")
    	_ListViewFill()
    EndFunc   ;==>_DsDelete

    da Alina auch eine sortierfunktion eingebaut hat, die die Listview mischt.

    Das hat mich auf die Idee gebracht.

  • Krass !!!
    Das funktioniert und ich glaube, das ich nun auch das andere was ich vorhabe umsetzen kann.

    D A N K E !!!


    Nun kann ich erst einmal die ersten einhundert Bücher in die DB schreiben und wegsichern.
    Schließlich möchte ich ja nicht die ganzen Bücher immer neu eingeben.

    Wobei wenn ich ehrlich bin es mich nun reitzt weiter zu machen mit der nächsten Sache, dem Upload.

    Überlegung des Vorgehends des Uploads:
    a) Datensatz aus dem ListView in die Inputfelder eintragen lassen
    b) Daten manuell bearbeiten
    c) Daten in die DB speichern in dem alle Input ausgelesen und übergeben werden an den SQLite Befehl.
    d) Daten neu aus der DB ins ListView übergeben/einlesen.


    Und nochmals: D A N K E !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (15. Dezember 2015 um 22:29)