Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-05-2005
romansiux romansiux is offline
Miembro
 
Registrado: mar 2005
Posts: 33
Poder: 0
romansiux Va por buen camino
Error (Duplicate Entry)

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.
Responder Con Cita
  #2  
Antiguo 25-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 25-05-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por romansiux
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.
Puedes usar TRY EXCEPTION:
Código Delphi [-]
 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.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #4  
Antiguo 25-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 31-05-2005
romansiux romansiux is offline
Miembro
 
Registrado: mar 2005
Posts: 33
Poder: 0
romansiux Va por buen camino
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

Saludos

Y Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:01:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi