Markierte Zeile im DBGrid löschen



  • Hallo
    Das ist mein erster Beitrag.
    Erstmal wollte ich sagen dass das Forum echt klasse ist.
    Doch für mein Problem habe ich noch keine Lösung gefunden, obwohl es hier schon sehr viele ähnliche Probleme gepostet wurden.
    Also ich beschäftige mich gerade mit Borland C++ in Verbindung mit SQL Datenbanken.
    Das Anzeigen meiner Tabelle und das Hinzufügen von Daten funktioniert auch schon sehr gut.
    Dazu verwende ich DataSource, TQuery und DBGrid.
    Und nun zu meinem Problem:
    Mein Ziel ist es, eine markierte (selektiere) Zeile zu löschen (oder vielleicht auch Datensätze zu bearbeiten)
    Also z.B. markieren -> rechte Maustaste löschen oder einfach ein Entfernen Button einfügen.
    Das alles möchte ich ohne den Navigator machen.
    Ich würde mich freuen, wenn mir jemand eine Lösung zeigen kann.

    Danke im Voraus
    Dennis



  • Hallo DennisHH,

    wenn du eine Zeile im DBGrid selektierst springt der Datensatzzeiger mit zum ausgewählten Datensatz.

    Deshalb kannst du einfach einen Button nehmen und mit
    ???->Delete();
    den aktuell ausgewählten Datensatz löschen.

    mfg
    VergissEs



  • Hallo

    Ja so was ähnliches habe ich schon gedacht, nur genau das was du
    in ?? geschrieben hast und was noch dazu nötig ist um eine Zeile aus einer Datenbank zu löschen ist mein Problem.

    MFG DennisHH



  • Hallo,

    du hast doch ein TQuery also musst du
    TQuery1->Delete();
    benutzen, um den ausgewählte Datensatz zu löschen.

    Schau dir mal die Hilfe über TQuery an, dann kommst du meist selbst
    auf eine richtige Lösung.

    mfg
    VergissEs



  • Hallo
    Nach etlichen Stunden durchsuchen von Hilfetexten und Foren bin ich immer noch nicht weiter 😞
    Hab sogar ein Programmiere Lehrer gefragt, weil mir das hier langsam zu peinlich wird hier immer nachzufragen, aber der hatte keine Ahnung davon.
    Also wenn ich TQuery->Delete(); schreibe, bekomme ich die Fehlermeldung das die Tabelle schreibgeschützt ist.
    Daraufhin bin ich auf CanModify bzw. Readonly etc. gestoßen. Hat mich aber auch nicht wirklich weiter gebracht.
    Was ich jetzt gebrauchen könnte wäre ein kleines Beispiel, bin nämlich schon am verzweifeln.
    So schwer kann das doch nicht sein?!?
    Viele Grüße und vielen Dank im Voraus
    DennisHH


  • Mod

    Hallo

    so einfach mit Query->Delete wuerde ich es nicht machen

    hol dir aus deinem Query die Werte, die deinen Datensatz sicher beschreiben
    (Index)

    und loesche es mit einem anderen Query
    DELETE FROM ... WHERE xx = yy

    oder greif direkt auf die Datenbank (TTable zu)

    MfG
    Klaus



  • So würde ich es auch machen, aber nicht vergessen, das Anzeige-Query mit frischen Daten zu füllen (damit der gelöschte Datensatz nicht mehr angezeigt wird)!



  • Hallo Leute
    Ich habs endlich geschafft. Ich kann jetzt jede markierte Zeile in einem DBGrid löschen!
    Auf die Anzahl der Aufrufe dieses Beitrags schließe ich, dass es nicht nur mich interessiert hatte wie es geht, darum poste ich hier mal den Code:

    void __fastcall TfrmFilme::btnEntfernenClick(TObject *Sender)
    {
     AnsiString strText = DBGrid1->Fields[1]->AsString; //strText = Inhalt des markierten Feldes aus der 2ten Spalte 
     Query1->Close();
     Query1->SQL->Clear();
     Query1->SQL->Add("DELETE from Filme where FilmName = :Name"); //Delete mit Parameter :Name
     Query1->Params->Items[0]->AsString = strText; //dynamisches Parameter erzeugen
     Query1->ExecSQL();
     Query1->SQL->Clear();
     Aktualisieren(); //Eigene Funktion zum Aktualisieren der Tabelle wird gestartet
    }
    

    Vielen Dank noch mal an alle!
    Gruß DennisHH



  • DennisHH schrieb:

    Ich kann jetzt jede markierte Zeile in einem DBGrid löschen!

    Im Sinne eines besseren Verständnisses der tatsächlichen Vorgänge solltest du dir diese Terminologie abgewöhnen.
    Du löschst nicht eine Zeile aus dem DBGrid sondern einen Datensatz aus der über das DBGrid visualisierten Datenquelle. Schon deine ursprüngliche Fragestellung hätte deshalb lauten müssen: "Wie lösche ich den im DBGrid selektierten Datensatz aus der Datenbank bzw. Tabelle?"


Log in to reply