Un comentario nada más. Como supongo ya sabes, puedes agregar una sentencia SQL a un TQuery utilizando la propiedad Text, o en tu caso, utilizando la función Add, la diferencia entre uno y otro, es que Text te lo pone todo en una sola línea de texto y utilizando Add, la instrucción estará dividida en líneas.
En tu caso, estas utilizando Add como se utilizaría Text, perdiendo así la ventaja que tiene Add sobre Text, vamos, que es como tener un coche y nunca usarlo.
Yo te recomendaría que utilizaras Add en cada línea de la instrucción SQL:
Código Delphi
[-]
sql.Add(' SELECT Disponibilidad.CodigoDisponibilidad, Disponibilidad.FechaExpedicion, Disponibilidad.Objeto, Disponibilidad.Valor, AnteproyectoGastos.CodigoPresupuestal ');
sql.Add(' FROM (Recurso INNER JOIN (AnteproyectoGastos INNER JOIN GastosRecursos ON AnteproyectoGastos.CodigoPresupuestal = GastosRecursos.CodigoPresupuestal) ON Recurso.CodigoRecurso = GastosRecursos.CodigoRecurso) ');
SQL.Add(' INNER JOIN (Disponibilidad INNER JOIN DisponibilidadRubro ON Disponibilidad.CodigoDisponibilidad = DisponibilidadRubro.CodigoDisponibilidad) ON (AnteproyectoGastos.CodigoPresupuestal = DisponibilidadRubro.CodigoPresupuestal) ');
SQL.Add(' AND (Recurso.CodigoRecurso = DisponibilidadRubro.CodigoRecurso) ');
sql.Add(' WHERE AnteproyectoGastos.CodigoPresupuestal=:CodigoPresupuestal');
sql.Add(' order by Disponibilidad.CodigoDisponibilidad');