Punkt a) hast du glaub ich verstanden wie ich das meinte. Punkt c) Ansatzweise, drum erkläre ich den mal einfacher.
Stell dir vor in der Klasse CustomerList, die ja eine Objektlist beinhaltet, hast du noch eine weiter Liste enthalten, dass könnte z.B. nur eine einfache TStringlist sein.
Wenn du jetzt einen Datensatz Deletest in der CustomerList, gehst du erst hin und schreibst die ID des Datensatzes in die StringList, denn die ID ist ja alles, was du später zum löschen brauchst.
Dann löschst du den Datensatz/Customer aus der CustomerList und füllst die ListView neu.
Beim SaveToDB benutzt du dann die Funktion die du am Anfang hattest (ohne DRY
) mit dem Insert und Update. Anschließend gehst du dann noch die Stringliste durch und setzt für jede darin gespeicherte ID noch ein passendes DeleteStatement ab.