Tienes razón, he probado lo que has dicho de poner la consulta entera dentro de la propiedad sql del tquery y si que me funciona. Pero yo lo hago rellenando la query desde código. Te pongo el principio del código para que veas como añado la consulta.
Código Delphi
[-]
Qry_Principal.Active := False;
Qry_Principal.sql.Clear;
Qry_Principal.SQL.Add('select distinct d.area_s,tp,mer,ter,eer,aer,mec,tec,dc,eec,aec,dp,pm,aep,mrs,ers');
Qry_Principal.SQL.Add(' from detall_q_sit d,');
Qry_Principal.SQL.Add('(select area, count(*) as tp');
Qry_Principal.SQL.Add(' from detall_q_sit');
Qry_Principal.SQL.Add(' group by area) t_p,');
.
.
.
.
Qry_Principal.Active := True;
Asi voy añadiendo la consulta en la Tquery. El problema viene cuando al ejecutarla me da un error de que falta un parentesis en la consulta y para ver que me ha generado me detengo justo antes de que active la query y miro la consulta que me ha generado. Veo el chorro de la consulta y justo en el caracter 4096 se corta y empiezan unos serie de caracteres (muchos) como estos "#0#0#0#0#0#0#0#0#0#0#0#0#8',R'#0'È~-'#7'Dª'#0".
No se si me he explicado bien

. Pero bueno ahi reside mi duda. ¿Porque no me genera correctamente la sentencia justo cuando llega a ese número de caracteres?