Prueba así:
Código Delphi
[-]
...
qry := TIBQuery.Create(nil);
try
qry.database := datamodule2.database;
Qry.SQL.Text := cadenaSQL;
Qry.Prepare;
Qry.execsql;
Qry.unPrepare;
except
Qry.Free
end;
NOTA: No haría falta crearlo y destruirlo cada vez, simplemente limpiar la sentencia y volver a ańadirla, pero aun así no debe dar ningun problema.
Si solo lo paso una vez funciona perfectamente, si lo paso en un bucle da un error y no sigue, el error lo da en el qry := TIBQuery.Create(qry);