Ya sé que el código es sólo un ejemplo, no siempre tenemos que seguirlo a pies juntillas, pero como tendemos a hacer copy & paste, mejor así:
Código Delphi
[-]
With dbgrid1.datasource.dataset do begin
try
DisableControls; First;
While not eof do begin
if Ccat.Items.IndexOf(FieldByName('Categoria').AsString)=-1 then
Ccat.Items.Add(FieldByName('Categoria').AsString);
Next;
end;
finally
EnableControls; end;
Si ocurre un fallo al recorrer todos los registros (una excepción) ya no volvería a mostrarse los registros en los controles DBAware. Con un try... finally se asegura el código.
Saludos