Interceptar errores al insertar un registro

Saludos,,
Estoy realizando una aplicación con una bases de datos...(Table). Esta base de datos posee 2 campos en los que no se pueden duplicar registros, necesito que cuando se añada otro registro y por casualidad este ya existente poder capturar de que campo de la tabla es...
Me explico mejor
Los campos de la tabla son los siguientes Código y No_Identidad
cuando inserte un código y este ya exista en la base de datos me muestre un mensaje este código ya existe y lo mismo debería suceder con el carnet de identidad pero con el mensaje este Carnet de identidad ya existe

1 Respuesta

Respuesta
1
Ok, en el componente TTable que supongo que estas usando, tiene un evento que se llama onPostError, dentro de este deberás validar el error que te esta arrojando, por ejemplo:
Para este problema que tienes pones:
if pos('Violation of PRIMARY KEY',E.message) <> 0 then
begin
showMessage('El registro ya existe');
abort;
end;
Con esto cacharas cuando se dupliquen las llaves.
Tu respuesta me sirvió muchísimo y te lo agradezco.
No habrá algo para saber el campo que se ha duplicado, porque son dos los campos donde no se pueden duplicar los registros...
Bueno recuerda que la llave primaria seria en conjunto con los 2 campos... así que si repites por ejemplo así:
CODIGO NO_IDENTIDAD
1 2 esto es correcto
1 3 esto es correcto
1 2 esto es incorrecto
2 3 esto es correcto
Si te das cuenta en el segundo registro 1 3, ahí ya estas repitiendo el código 1, pero no es un error ya que tu llave primaria se compone por los 2 campos, ¿si me explico?, en pocas palabras cuando tienes un error de llaves duplicadas, es porque los 2 campo están mal nunca va a estar un solo campo mal, te lo digo porque tu quieres mostrar que campo esta mal, pues yo te digo que los campo están mal. Por lo tanto si quieres mostrar la información mal captura o repetida pues simplemente en el mensaje lo agregas, así:
showMessage ('El registro ya existe:' +#13+ 'Codigo: '+Table1CODIGO.AsString+#13+'No Identidad: '+Table1NO_IDENTIDAD.AsString);
Así ya mostrarías el valor capturado indicándole que esta repetido o que ya existe.
Espero haberme explicado, tu llave primaria esta compuesta por los 2 campos, así que nunca sera un solo campo el que se duplique.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas