Yo lo que veo mal es el procedimiento que utilizas para concatenar los valores.
Código Delphi
[-]
procedure OnClick(Sender: TObject);
var
cAnios : String;
begin
cAnios := cAnios + Edit1.Text + ',';
end;
Esto trabaja sobre una variable local, la cual se pierde después de terminar el procedimiento.
Incluso si fuera una variable global "," te dejaría una coma al final.
Deberías hacerlo así:
Código Delphi
[-]
var
cAnios : string;
procedure OnClick(Sender: TObject);
begin
if (cAnios = '') then
cAnios := cAnios + Edit1.Text + ','
else
cAnios := cAnios + ',' + Edit1.Text;
end;
procedure BotonInicializarOnClick(Sender: TObject);
begin
cAnios := '';
end;
procedure EjecutarProc(Sender: TObject);
begin
if (cAnios > '') then
begin
IBQueryMotivos.SQL.Clear;
IBQueryMotivos.SQL.Add('select * from motivos where año in (' + cAnios + ')');
IBQueryMotivos.Open;
end
else
ShowMessage('No se han seleccionado años');
end;
begin
cAnios := '';
[...]
end;