Hola,
El asunto puede enfocarse y solucionarse de diversos modos. Así a bote pronto se me ocurre utilizar un "CheckListBox" o "CheckBox", como dices, pero agrupados en un "TGroupBox".
El siguiente código podría darte una idea de cómo iterar por un "CheckListBox", buscar los "Items marcados" e ir conformando la cadena "de los campos" que luego se incluirá en la cadena que contenga la consulta SQL en cuestión:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
c,s: string;
begin
c := '';
for i := 0 to CheckListBox1.Count - 1 do
begin
if(CheckListBox1.Checked[i])then
begin
if c = '' then
c := CheckListBox1.Items[i]
else
c := c +','+ CheckListBox1.Items[i];
end;
end;
s := Format('SELECT %s FROM tabla', [c]);
ShowMessage(s);
end;
Y este otro código es similar al anterior, salvo que se utiliza un "GroupBox" y distintos "CheckBox" dentro del mismo, como queda dicho:
Código Delphi
[-]
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
c,s: string;
begin
for i := 0 to GroupBox1.ControlCount-1 do
begin
if(TCheckBox(GroupBox1.Controls[i]).Checked)then
begin
if c ='' then
c := TCheckBox(GroupBox1.Controls[i]).Caption
else
c := c +','+ TCheckBox(GroupBox1.Controls[i]).Caption;
end;
end;
s := Format('SELECT %s FROM tabla', [c]);
ShowMessage(s);
end;
Disclaimer: Fíjate que en este segundo código fuente se asume que en el "GroupBox" sólo habrá "CheckBox"; que no se comprueba si nos topamos con otro tipo de controles, etc. En fin, es sólo para que te hagas una idea de una posible solución para el caso.