Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-09-2005
ReyQ ReyQ is offline
Registrado
 
Registrado: sep 2005
Posts: 1
Poder: 0
ReyQ Va por buen camino
Question Como procesar la excepción de violación de clave?

Saludos, amigos, necesito ayuda. Tengo un programa escrito en Delphi 6 que lee información en archivos texto y luego de validarla, utilizando ADO, la escribe en las tablas correspondientes de una Base de Datos SQL Server 2000 (service pack 4) sobre Sistema Operativo WINDOWS 2003 server. Como es lógico, cuando alguno de mis datos ya está presente en la tabla, se produce un error de violación de clave. Conoce alguien como procesar esa excepción desde mi código en Delphi ?
Responder Con Cita
  #2  
Antiguo 16-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Te ha faltado decir la clase de excepción que se levanta, pero, en todo caso, conociéndola, pienso, si no estoy equivocado completamente, en que podría hacerse algo parecido a esto:

Código Delphi [-]
{...}
 begin
   {...}
   try
 
     {
       Lo que tengas que hacer que
       pueda causar una excepción
     }
 
   except
 
     on E : EClaseExcepcion do begin
 
       // Se produjo una excepción
       // del tipo que esperábamos
       
     end;
 
     on E : Exception do begin
 
       // La excepción producida es
       // otra, no la que pensamos
 
     end;
   end;
 end;

¿Metí la pata demasiado? ¿Se notó mucho?
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 16-09-2005 a las 00:03:02. Razón: Corrección del texto.
Responder Con Cita
  #3  
Antiguo 16-09-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
Código Delphi [-]
try 
  ExecSQL; //Instrucción insert
  {Tambien podría ser E:ESDEngineError o E:ESDMssError 
  dependiendo del rango de errores que se quieran capturar}
  except on E:Exception do 
    if  (E is EDBEngineError) then 
      with EDBEngineError(E).Errors[0] do 
         if ErrorCode = 9729 then 
          MessageBox(frmInicial.Handle,'Llave duplicada.','Error',MB_ICONERROR);
end; //Fin try

algo que hice alguna vez fue:
Código Delphi [-]
try
 //instrucción insert
except on E:Exception do 
  if (E is EDBEngineError) then
   with EDBEngineError(E).Errors[0] do 
    if ErrorCode = 9729 then
      //instrucción update
end;//Fin try

y me gustaría su opinión al respecto, es decir, tratar de insertar la información, y si hay una violación de llave, entonces actualizar la información, ¿es correcto?, ¿válido?, ¿óptimo?
__________________


Última edición por ContraVeneno fecha: 16-09-2005 a las 01:02:17.
Responder Con Cita
  #4  
Antiguo 16-09-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que ya está resuelto, pero hace un par de días salió éste hilo:
http://www.clubdelphi.com/foros/showthread.php?t=25175
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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 14:41:14.


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