Has probado con la instrucción Cancel?
Código Delphi
[-]procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
if Buscar(DataSet.FieldByName('Nombre').AsString) then begin
Showmessage('El codigo esta duplicado');
DataSet.Cancel;
end;
end;
Esto te evitaría tener que borrar registros en al AfterPost y te evitaría tener que entrar campos vacíos en la clave.
Además, si hay dos puestos insertanto campos duplicados, se insertarán dos campos vacíos y también fallará.