PDA

Ver la Versión Completa : Error (Duplicate Entry)


romansiux
25-05-2005, 03:04:25
Hola a todos
Les agradecería muchísimo su ayuda.

Tengo Delphi 7 y mi Base de Datos esta en MySql, El problema que tengo es cuando quiero agregar un dato que ya existe en mi Base de Datos, Me aparece el siguiente error: (Duplicate entry 'dato que quiero agregar' for key 2) y esque en mi Base de Datos le tengo que no se repita( que sea unico).
Y cuando me sale ese error ya no me deja hacer nada, me tengo que salir completamente y volver a entrar al sistema.
Como le puedo hacer para poner un mensaje de que lla existe ese dato, y que al darle ok siga trabajando, y que no me trabe la aplicacion.

Saludos y Gracias.

roman
25-05-2005, 04:06:56
Es posible que el comportamiento que describes sea el normal (o casi). Un error como el de llave duplicada se genera cuando se intenta hacer el 'post' del registro que se está editando, sea porque lo haces explícitamente o por que te mueves de registro.

Cuando este error aparece, el 'foco' regresa al registro problemático y volverá a surgir cada vez que intentes moverte de registro mientras no corrijas la situación, lo cual es normal. Una vez que cambias el valor o cancelas la edición puedes continuar trabajando.

Por ello se me hacer raro que tengas que salirte del sistema. Quizá es simplemente que no has corregido el problema.

No mencionas con qué componentes trabajas pero creo recordar que usas las componentes MyDac. En tal caso, yo acabo de hacer una prueba con la versión 3.50 de las componentes y el comportamiento es el esperado.

Ahora bien, recuerda que puedes controlar dicho error con el evento OnPostError del dataset (en este caso MyTable) mostrando un mensaje personalizado y poniendo el parámetro Action en daAbort. De cualquier manera la situación es la misma, no podrás moverte mientras no corrijas el valor o canceles la edición. Sin embargo podrías usar este evento para restaurar el valor original del campo o ponerlo en blanco.

// Saludos

vtdeleon
25-05-2005, 18:39:17
SaludosComo le puedo hacer para poner un mensaje de que lla existe ese dato, y que al darle ok siga trabajando, y que no me trabe la aplicacion. Puedes usar TRY EXCEPTION:
begin
try
{codigo para grabar}
except
showmessage('Ya existe este Registro');
end;
end;

En la linea except puede capturar el tipo de error que esta dando para que sea mas especifico, ya que una tabla puede dar errores por diversas razones.
Puedes consultar esta pagina para que quedes claro: Delphi Basics. (http://www.delphibasics.co.uk/RTL.asp?Name=Except)

roman
25-05-2005, 19:07:58
El problema con try-except, en mi opinión, es que el "post" no siempre se hace explícitamente; puede ser implícito por ejemplo cuando se está editando en un DBGrid y se mueve el foco fuera del registro activo.

El uso de eventos como OnPostError nos permiten centralizar el manejo del error sin tener que preocuparnos por la acción específica que haya generado el error.

// Saludos

romansiux
31-05-2005, 02:17:28
Aun no he podido hacerle como tu dices Roman, me podrías dar un ejemplo por favor. Puse un mensaje en OnPosError, pero no se si este bien
Exception.create('Ya existe');
y lo del daAbort en que parte lo pongo, bueno yo lo puse después del mensaje,
Action:=daAbort

Y disculpa Roman que no te contestara, pero estuve mal de salud y me internaron, pero ya estoy mejor:D

Saludos

Y Gracias