falls du die ibexpert Vollversion hast (oder auch andere firebird traceapi tools), kannst du sehen, was der Server daraus macht, das ist meistens viel wichtiger als das was deine Komponente da so als Protokoll einträgt.
Bei fast allen Komponenten gilt folgendes:
wenn du ein prepare aufrufst, wird die Komponente kein automatisches unprepare machen. Sobald du aber der
SQL Text änderst, wird ein unprepare gemacht.
Wird prepare nicht explizit aufgerufen, dann wird nach open/close bzw nach ExecSql automatisch ein unprepare gemacht und mit dem nächsten open/close oder execsql ebenfalls wieder ein neuer prepare/unprepare zyklus.
Dein Code macht beim einmaligen Aufruf nicht mehr und nicht weniger als jede Komponente auf
API Ebene auch machen müsste. In der ExecSQL Implementation kommt irgendwo oben sinngemäß if not prepared then prepare ..... und am ende das zugehörige unprepare, falls das unprepared war.
Im Setter für die
SQL Property wird auf jeden Fall ein if prepared then unprepare aufgerufen.
wenn du aus den zeilen
Code:
Q.Prepare;
Q.ExecSQL;
Q.UnPrepare;
das hier gemacht hättest, wäre es auf der Datenbankseite identisch abgelaufen.
Erst in Schleifen mit unterschiedlichen Parametern ist ein explizites Prepare/Unprepare oft sinnvoll, aber auch nicht immer ...