Hola.
Si queres buscar si una clave ya está duplicada... no podes hacerlo en el mismo dataset, pues al lanzar el locate, el estado cambiará de dsInsert (o dsEdit) a dsBrowse, y esto povocaria un Post automáticamente.
Usá otro dataset apuntando a la misma tabla... o bien un query "especializado" que reciba como parámetro el dato a buscar.
Por otro lado, no es aconsejable usar la propiedad Text del dbEdit. Dado que este está asociado a un valor en un DataSet, es mejor usar directamente este.
En lugar de
dbEdit1.text
Tabla.FieldByName('campo').Value o bien
dbEdit1.Field.Value
Para la otra pregunta, tal como lo indica la guia de estilo, mejor abrí otro hilo.
hasta luego.
