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 17-06-2005
carlos gonzalez carlos gonzalez is offline
Miembro
 
Registrado: may 2005
Posts: 108
Poder: 20
carlos gonzalez Va por buen camino
Problema para capturar Errores

Hola amigos tengo un problema ojala puedan ayudarme u orientarme, se los voy a agradecer infinitamente, ya tengo mas de una semana y no he podido solucionar este problema., dejen les explico. Lo que quiero es cachar los errores que manda la base de datos cuando se comete un error por ejemplo duplicación de una llave primaria y mandar un mensaje hecho por mí evitando que el sistema truene y siga corriendo.



Anteriormente usaba el EDBEngineError y me jalaba perfectamente, por ejem. El sig. Código lo tenía en el botón de guardar y cuando se cometía un error de duplicación de llaves primarias me manda un mensaje.



procedure TForm33.guardarClick(Sender: TObject);

begin

try



if (pass.Text='') or (pass2.Text='') or(nom.Text='') or (userr.Text='') then

begin

guardar.enabled:=false;

application.messagebox('No Puede Haber Campos Vacios','Validacion De Datos',mb_ok+mb_iconerror);

end

else

begin

tuser.Post;

nom.ReadOnly:=true;

userr.ReadOnly:=true;

pass.ReadOnly:=true;

pass2.Enabled:=false;

primer.Enabled:=true;

siguiente.Enabled:=true;

anterior.Enabled:=true;

ultimo.Enabled:=true;

eliminar.Enabled:=true;

editar.Enabled:=true;

guardar.Enabled:=false;

nuevo.Enabled:=true;

cancelar.Enabled:=false;

salir.Enabled:=true;

tuser.First;

pass2.Text:='';

end;

except

on EDBEngineError do begin

application.messagebox('Este Usuario Ya Existe','Validacion De Usuario',mb_ok+mb_iconerror);

cancelarClick(Sender);

end;

end;

end;









Pero mi problema ahora es que estoy utilizando tablas de DB2 montadas en un servidor AS/400 y la rutina anterior no me funciona., alguien podría ayudarme a salir de este problema, se los voy a agradecer eternamente.



Su amigo Charles



Que DIOS los bendiga
Responder Con Cita
  #2  
Antiguo 17-06-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
AMIGO
UTE NO ENTIENDE QUE NO PUBLIQUE MAS DE UN HILO!!!

LOS DEMAS QUE ME DISCULPEN PERO....LA GENTE NO LEEE!!!

PD:disculpen la mayuscula tambien
__________________
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
  #3  
Antiguo 17-06-2005
carlos gonzalez carlos gonzalez is offline
Miembro
 
Registrado: may 2005
Posts: 108
Poder: 20
carlos gonzalez Va por buen camino
Perdon

Perdon por publicar mas de un hilo, soy nuevo en el uso de esta pagina, pero ya ni vuelve a suceder

Saludos tu amigo Charles
Responder Con Cita
  #4  
Antiguo 17-06-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

1ero Bienvenido al Foro

2do Leer
Guía de Estilo de los foros
calidad de las preguntas
Utilizar la etiqueta CODE

Asi no volvera a suceder

Disculpa mi manera de contesta ahorita, pero esta semana ha sido un caos
__________________
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
  #5  
Antiguo 18-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Independientemente de lo comentado por vtdeleon Comprueba esto:

doble clic a tu tabla tuser. En algún campo tienes la propiedad Required a True?, en delphi.

Si lo tienes, (casi seguro que si) entonces el error de clave duplicada es un EdatabaseError, por eso no entra en el except que tienes puesto.

Puedes poner a ese campo el Required a false, y dejar en tu base de datos Required a True; así si funcionará con el código actual.

Otro tema más grave, es que estas capturando cualquier error de tipo EDBEngineError. El error concreto de violacion de claves es: Integrity Violation

9729 : Key violation.
(en internet buscando por "BDE ERROR CODES", seguro que encuentras el listado completo).

La comprobación correcta será:
Código Delphi [-]
  if (E is EDBEngineError) then
    with EDBEngineError(E).Errors[0] do     
    if ErrorCode = 9729 then
    begin
       // tu mesage box

    end
  else
    raise;

Edito: Faltaba poner .Errors[0] para acceder a ErrorCode, Gracias carlos

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 20-06-2005 a las 18:11:17. Razón: Código Incompleto.
Responder Con Cita
  #6  
Antiguo 20-06-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
ESDMssError?????

Saludos a todos
Estoy tratando de captura el mismo error de "duplicate key" pero no logro conseguirlo... estoy utilizando SQL server y delphi 5.
el problema es que E no es EDBEngineError, el classname que me muestra es ESDMssError pero tampoco logro encontrar información sobre ese punto.
El error se refiere a "duplicate key" con el número de error 2601 el cuál si he encontrado información... en fin, si alguien tiene alguna pista de hacia donde dirigirme se los agradecría mucho.

este es el código que tengo:
Código Delphi [-]
try
ExecSQL; //Instrucción insert
except on E:Exception do begin
ShowMessage('Error Tipo: '+E.ClassName+', Con el mensaje: '+E.Message);
If (E is EDBEngineError) then //¿nunca es verdadero?
messagebox(handle,'No se puede guardar','Error',MB_ICONERROR);
end; //Fin except
end; //Fin try

Gracias y saludos a todos.
__________________

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 11:44:31.


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