Un detallito: No puedes usar el operador "and" al unir los where, porque ningún registro cumple todas las condiciones.
Te aconsejo recorrer selected rows y que el sql quede así:
Código SQL
[-]
select * from mi tabla
where idCliente in (1, 22, 3, 44, 55)
La forma de obtenerlo desde el grid es muy parecido a lo dicho por coso:
Código Delphi
[-]
var ids:string;
begin
ids := EmptyStr;
for i := 0 to DBGrid1.SelectedRows.Count -1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
ids := ids + dbgrid.datasource.dataset.Fieldbyname('idCliente').AsString + ', ';
end;
delete(ids, length(ids)-1, 1); query2.sql.text := 'select * from mi tabla where idCliente in (' + ids + ')';
QuickRep1.DataSet := Query2;
Estoy suponiendo que tu campo clave se llama idCliente y está declarado en la base de datos como entero. Si es un string, debe quedar el sql así:
Código SQL
[-]
select * from mi tabla
where idfactura in ('c00001', 'c00002', 'c00007')
Tip: usa la rutina QuotedStr para entrecomillar cada número de factura.
SAludos