Hola DanyTorres, hay varias cositas que me gustaría comentar:
Yo usaría un Tchecklistbox, al tiempo de añadir los elementos, se puede usar AddObject en lugar de usar Add, de esta forma harías algo así para rellenar el listbox.
Código Delphi
[-]
Tchecklistbox.items.AddObject( tabla1Campo.AsString, Pointer(tabla1ClavePrimaria.AsInteger);
Para saber los que marcó el usuario, es un simple bucle:
Código Delphi
[-]
str := emptystr;
for i:=0 to checklistbox.items.count- 1 do
with checklistbox do
if Checked[i] then
str := str + inttostr(Integer(Items.Objects[i]))+ ', ';
if str <> emptystr then
delete(str, length(str)-1, 1);
Por último el sql a lanzar se crea así:
Código Delphi
[-]
query1.sql.text := ' select * from tabla where ClavePrimaria in ('+ str+')';
query1.open;
el resultado del sql sería:
Código SQL
[-]
select * from tabla where ClavePrimaria in (1,3,33,5);
Suponiendo que la clave primaria está definida como un entero en la base de datos.
Saludos