Yo te recomiendo en ese caso que uses un Edit para cada campo.
De esta manera haces vos por voluntad propia el insert, de lo contrario lo hace automatico la coneccion DBEdit.
Entonces q la hora de insertar lo haces previa busqueda
if not (Tabla.Locate('Campo1',Edit1.text,[loPartialKey,loCaseInsensitive])) then
begin
//Aqui una de las dos Append o Edit
//Tabla.Edit; // Edita el registro Actual
Tabla.append; //Agrega nuevo Registro
TablaCampo1.asString:= Edit1.Text;
Tabla.post;
end;
Para que te reconosca "TablaCampo1" todo junto haces doble click sobre la tabla y le das addAll, lo que se hace con esto es dar acceso directo a cada registro de la tabla. Lo que esta a continuacion ".asString" es la manera que lo vas a tratar, puede que el campo sea o no string.
Si no para no tener que modificar tanto tu codigo deberias ir probando con el estado de edicion de la tabla, en el onchange del DBEdit verificar que no exista el dato que se esta escrib. Si existe que avise.
Bueno espero te sirva, Suerte.