Wenn nicht gelöscht sondern geändert werden soll, wieso wird dann überhaupt das Löschen ausgelöst? Eine ähnliche Anforderung habe ich anders gelöst:
1. es gibt ein Statusfeld das bei Bedarf geändert wird (statt Löschung).
2. die Ergebnismengen aller Querys werden mit Hilfe des Statusfeldes eingeschränkt. Etwa so
Code:
select * from TABELLE where (...bedingung...) [color=#ff005b]and (STATUS = 1)[/color]
Eine Löschung ist eben keine, sondern setzt nur das Statusfeld z.B. auf -1 o.ä. In Deinem Beispiel könnte man sogar das Enddatum dazu benutzen (...ist aber schlechter Stil)