Du solltest darauf achten, keine Phantome zu jagen.
Du hast jetzt dynamisches
SQL und gestern sah Dein Delphi code noch so aus, dass Du "nur" bestimmte Checkbox Kombinationen abgefragt hast (and/or/not Kombinationen).
Nun hast Du reine Or Verknüpfungen, die der Reihe nach abgegrast werden.
Sprich, Du bekommst nun wahrscheinlich einfach erstmalig die volle Ergebnissmenge. Ein Tag, das eben an mehreren Stellen greift, ergibt für jeden Or Fall ein Ergebnis.
Das sollte über ein "Distinct" oder "Grouy by" einzudampfen sein.
Stichwort "schon" Variable:
Ich hab nicht alles verfolgt in dem Thread, aber vielleicht kannst Du statt der aufwendigen und unübersichtlichen Varianten Handhabung die where-Clause fest einbauen mit einer Bedingung die immer wahr ist
where 1=1 and([Hier der dynamische Teil])
Das finden nicht alle gut, aber Du sparst Dir viel Code und gewinnst Übersichtlichkeit.