Probando tu solucion me encuentro con que...
Código Delphi
[-]
index:=data.FieldDefs.IndexOf('Apellido1');
if index>-1 then
begin
XXX:= data.FieldCount ;
data.FieldDefs.Delete(index);
XXX:= data.FieldCount ;
end;
XXX antes y despues del delete sigue conteniendo la misma cantidad de columnas...
alguna otra idea?