¡¡Cómo se nota que ya es jueves!! ¿¿tenemos ganas de cháchara ehhhh??
Al menos se ha explicado varios puntos siempre importantes en el diseño, como ves tienes varias alternativas.
Lo normal es poner un índice único sobre el campo dni, en cuanto se intente repetir el mismo dni, se mostrará una excepción y no dejará insertarlo.
Si hay posibilidad de repetirse (como han comentado abajo), no pongas el índice y búscalo manualmente. Lanza una consulta TADOQUERY antes de guardar:
Código Delphi
[-]
adoquery1.sql.text := ' select dni from cliente where dni = :eldni';
adoquery1.parameters.parameterbyname('eldni').value = edit1.text;
adoquery1.Open;
if not adoquery1.IsEmpty then
begin
ShowMessage('el dni ya existe');
sysutils.Abort;
end;
También puedes usar adotable1.lookUp(....); pero no recuerdo la sintaxis
, consulta la ayuda.
No te aconsejo usar el Locate si usas DBEdits y DBxxxx porque en caso de que se encuentre repetido, provocará un cambio de registro y normalmente eso vuelve a intentar guardar el registro por lo que obtienes un bucle infinito.
Saludos.