Mich wundert eher, dass das Statement ohne FROM überhaupt ausgeführt wird.
Beim MS
SQL-Server ist das
FROM ein optionales Schlüsselwort:
https://docs.microsoft.com/de-de/sql...ql-server-2017
Und falls es darum gehen sollte, Detaildaten zu einem Mastersatensatz zu löschen, würde ich das eher auf
DB-Ebene über eine Löschregel handhaben.
Wenn du das alles in eine Transaktion packst kann hier nix passieren.
Das Problem ist hier das du den Result-Wert falsch behandelst.
ExecSQL liefert die Anzahl der betroffenen Datensätze zurück. Ist dieser für eine Löschaktion 0, so ist result = False.
Und wenn du im Projekt die Option eingestellt hast, Ausdrücke nur soweit wie nötig auszuführen sorgt ein
Result := Result and (lQuery.ExecSQL > 0);
dafür das nur die Zeile bis zum erkennen von
and ausgewertet wird und das ExecSQL nicht mehr aufgerufen wird.
Das ist aber auch nicht nötig. ExecSQL wird ein
Exception schmeißen wenn eine Löschaktion nicht erfolgreich sein sollte.
Windows Vista - Eine neue Erfahrung in Fehlern.