Hola,
supongo que te sobra el execsql.
yo hago esto en un caso exactamente igaul y funciona de maravilla. En definitiva, creo una variable tipo tabla, hago un insert, recorro la tabla on un cursor y hago varios cálculos, ...
La llamada al botón de ejecutar es así.
Código Delphi
[-]procedure TForm1.EjecutarConsulta;
begin
ADOQuery1.Close;
ADOConnection1.Connected:= False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:= DBMemo1.Text;
DataSource1.DataSet:=ADOQuery1;
ADOConnection1.Connected:= True;
ADOQuery1.Open;
end;
El texto de la consulta lo tengo en un campo de una tabla (DBMemo1).
Saludos