Da alle Veranstaltungen irgendwie vor/in oder in/nach 2024 starten/enden, kann das so nicht funktionieren...
Die Abfrage verknüpft das StartDatum und das EndDatum aber mit AND und nicht mit OR. Insofern sollte eine Veranstaltung im Ergebnis schonmal nicht nach 2024 beginnen und nicht vor 2024 enden. (Das wäre übrigens eventuell auch ein valides Kriterium.)
Könntest du mal konkret die Start- und Ende-Daten der Records auflisten, die deiner Meinung nach nicht im Ergebnis sein sollten?
Übrigens: Deine Abfrage macht meiner Meinung nach auch eine falsche Konvertierung beim übergebenen Jahr (J):
DM1.DataModule1.IBCQuery1.SQL.Add('where ((EXTRACT(YEAR from DatumStart) <= '+QuotedStr(IntToStr(J))+') and (EXTRACT(YEAR from DatumEnde) >= '+QuotedStr(IntToStr(J))+')) ');
Da
EXTRACT(YEAR FROM
einen
SmallInt zurückgibt, solltest du den nicht mit einem String vergleichen. Versuch es mal ohne die Quotes:
DM1.DataModule1.IBCQuery1.SQL.Add('where ((EXTRACT(YEAR FROM DatumStart) <= '+IntToStr(J)+') and (EXTRACT(YEAR FROM DatumEnde) >= '+IntToStr(J)+')) ');