Supongo que al acceder a parambyname es cuando hace el parser de la consulta... habría que mirarlo.
Puedes incluir todos los parámetros antes de acceder a parambyname. Una vez construida totalmente la consulta añades los valores:
Existen muchas formas de automatizar ese proceso, el primero que se me viene a la mente:
Código Delphi
[-]
type Tparametros = record
nombre : string;
Value : Variant;
end
var a: array [0..MaxParametros] of TParametros;
for i:=0 to maxparametros do
begin
p := query1.parambyname(a[i].nombre);
if Assigned(p) then
p.Value := a[i].Value;
end;
Saludos