Puedes hacer un solo query para consultar por uno o varios campos así:
Código Delphi
[-]
q.SQL.Add('select * from productos where (:clave is null or clave=:clave) AND (:nombre is null or nombre like :nombre) OR (:stock is null or stock>=:stock) ');
Solo tienes que llenar los parámetros según requieras, si no llenas ninguno te va a traer todos los registros. Esta es una forma muy sencilla de hacer combinaciones de condiciones y utilizas un solo query. De esta manera podrias traer por ejemplo: todos los productos que contengan "PRO" en su nombre y que tengan stock de mas de 10.
Para ello llenamos los parametros así:
Código Delphi
[-]
q.parambyName('nombre').AsString := '%PRO%';
q.ParamByName('stock').AsInteger := 10;