Aquí tienes el código más desarrollado, usa el debug y comprueba las variables por si hay algo que está como se esperaba.
Código Delphi
[-]procedure TFORMINGRESO.multiselect;
var
X: Integer;
sClaves: string;
begin
if DBGINGRESO.SelectedRows.Count = 0 then
begin
MessageBox (Handle, ' DEBE SELECCION AL MENOS 1 FILA PARA ELIMINAR ', ' SISTEMA CROSSROASD ', MB_OK);
Exit;
end
else
begin
sClaves := '';
for X := 0 to DBGINGRESO.SelectedRows.Count -1 do
with MDBRIONES.FDQBUS_DET_ING Do
Begin
DBGINGRESO.DataSource.DataSet.GotoBookmark(TBookmark(DBGINGRESO.SelectedRows.Items[X]));
sClaves :=sClaves + ',' + DBGINGRESO.datasource.dataset.fieldbyname('id_ing').AsString;
end;
Delete(sClaves, 1, 1);
SQL.Clear;
SQL.Add ('SELECT I.*, E. nom_esp, T. nom_tip FROM det_ingreso I LEFT JOIN especie E ON E.id_esp = id_esp_deting LEFT JOIN tipo T ON T.id_tip = id_tip_deting');
SQL.Add ('WHERE id_ing_deting IN (' + sClaves + ') ORDER BY LENGTH(cod_deting)ASC');
Open();
DBGDET_INGRESO.DataSource := MDBRIONES.DSBUS_DET_ING;
end;
end;