Delphi: Daten-Abgleich zwischen ListBox und Tabelle (D6)
Frage von Muschelknacker | 06.11.2021 um 18:45
Ich erstelle einen neuen Eintrag in einer ListBox und gleichzeitig in einer Tabelle, wie folgt :
procedure TForm1.neuBtnGClick(Sender: TObject); // neuen eintrag einfügen
begin
if (Editobject.Text = '') then exit;
if (Editobject.Text <> '') then begin
LBobject.Items.Add(Editobject.Text);
try
objectTable.Open;
objectTable.Insert;
objectTable.FieldByName('Gegenstand').AsString := Editobject.Text;
objectTable.Post;
objectTable.Close;
except
objectTable.Cancel;
end;
Editobject.Text := '';
end;
neuBtnG.Enabled := False;
end;
Wenn ich nun in der ListBox einen Eintrag lösche, dann muss dieser Eintrag auch in der Tabelle gelöscht werden.
Mein Ansatz lautet :
procedure TForm1.delBtnGClick(Sender: TObject);
begin
if LBobject.ItemIndex > -1 then begin // nur wenn ein Eintrag ausgewählt ist...
LBobject.Items.Delete(LBobject.ItemIndex); // dann löschen
try
objectTable.Open;
// ??? hier hab ich keine Lösung
objectTable.Close;
except
objectTable.Cancel;
end;
end;
delBtnG.Enabled := False; // löschen-Btn wieder false
end;
Kann jemand helfen ??
Ähnliche Themen
Delphi/Lazarus: Text langer Items als Hint in ListBox anzeigen
Tutorial | 0 Kommentare
Delphi/Lazarus: Markierte Items aus ListBox mit ENTF-Taste löschen
Tipp | 0 Kommentare
MySQL: Daten aus Tabelle löschen - Unterschied zwischen TRUNCATE, DELETE und DROP
Tutorial | 0 Kommentare
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
SQLite: Überprüfen ob Tabelle existiert
Info | 0 Kommentare
MySQL: Neue Spalte zu einer Tabelle hinzufügen
Tutorial | 0 Kommentare
Android Programmierung: Response von HTTP POST Request empfangen
Tutorial | 3 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.
Du machst leider keine Aussagen dazu, wie deine Tabelle aufgebaut ist. Hat sie einen Index? Enthält sie nur Strings?
Wenn du nicht über Indices arbeiten möchtest und die Tabelle nur Strings enthält, hol dir zunächst den selektierten Text aus der Listbox:
Und dann löscht du diesen Text aus der Tabelle:
if ATable.FieldsByName('Gegenstand').AsString = AText then begin ATable.Delete; end;Du solltest deinen Code aber umstrukturieren und das Löschen des Items ans Ende stellen, also nur dann wenn das Löschen in der Tabelle erfolgreich war.
06.11.2021 um 23:58
Ja, die Lösung gefällt mir.
Besten Dank.
Und meine Tabelle hat keinen Index.
Sie besteht aus dem Feld ID als Autoinc und dem Feld Gegenstand als String.
Das erfolgreiche Löschen in der Tabelle könnte ich doch folgendermaßen überprüfen:
var x: Integer; AText: String; begin AText := Listbox1.Items[Listbox1.Itemindex]; query1.close; query1.SQL.Add('SELECT count(Gegenstand) from object WHERE Gegenstand =''' + AText + ''' '); query1.open; x := query1.Fields(0).AsInteger; query1.close; if x>0 then begin // wenn x tatsächlich größer Null ist, dann ist das löschen fehlgeschlagen, // wenn x=0 dann kann das Item gelöscht werden. end;Kann das gehen? Ich teste mal.
Nochmal Danke..............
07.11.2021 um 16:47
Ich habe das obige getestet, damit geht garnix.
Aber hier die Lösung:
procedure TgForm.delBtnGClick(Sender: TObject); // Eintrag löschen begin if gLB.ItemIndex > -1 then begin // wenn ein Eintrag gewählt in ListBox... Form1.GQuery.Open; // in DB suchen..... if not Form1.GQuery.Locate('Gegenstand', gEdit.Text, [loCaseInsensitive,loPartialKey]) then begin Label1.Caption := Format('< %s > wurde nicht gefunden', [gEdit.Text]); end else begin Label1.Caption := Format('< %s > wurde gefunden', [gEdit.Text]); Form1.GQuery.Delete; // dann in DB löschen... Form1.GQuery.Close; end; end; Form1.GQuery.Close; Form1.GQuery.SQL.Clear; Form1.GQuery.SQL.Text := ('SELECT * FROM object'); Form1.GQuery.Open; gForm.gLB.Items.Clear; // aktuelle Einträge von DB... While not Form1.GQuery.Eof do begin gForm.gLB.Items.Add(Form1.GQuery.Fields[1].AsString); Form1.GQuery.Next; // in ListBox einlesen end; newBtnG.Enabled := False; gEdit.Text := ''; goBtnG.Enabled := True; Form1.GQuery.Close; end; .....Diese veränderlichen Einträge werden benötigt um dann ComboBoxen und Picklisten (DBGrid) zu füllen.
mfg...........
28.11.2021 um 17:35