Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Como procesar la excepción de violación de clave? (https://www.clubdelphi.com/foros/showthread.php?t=25223)

ReyQ 15-09-2005 23:38:33

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 ?

dec 16-09-2005 00:01:44

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? ;)

ContraVeneno 16-09-2005 00:59:57

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?

Neftali [Germán.Estévez] 16-09-2005 10:15:55

Creo que ya está resuelto, pero hace un par de días salió éste hilo:
http://www.clubdelphi.com/foros/showthread.php?t=25175


La franja horaria es GMT +2. Ahora son las 11:38:09.

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