Jaja, das ist wieder mein typischer Fehler, zuerst mache ich das so:
if NOT (Query1.State IN [dsInActive]) then Query1.Close;
und immer erst im zweiten Anlauf richtigrum:
if NOT (dsInActive in Query1.State) then Query1.Close;
. Wann nur werde mir das merken?
Aber eigentlich müsste das hier doch auf viel einfache gehen:
if query.Active then query.close;