Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema manejando excepciones (https://www.clubdelphi.com/foros/showthread.php?t=34148)

David 28-07-2006 18:51:02

Problema manejando excepciones
 
Tengo una instrucción para copiar datos de una tabla a otra , lo que pasa es que la tabla 1 , admite artículos repetidos , la tabla 2 (que se copia de la tabla 1 , no admite artículos repetidos , da key violetion , cuando repite uno).

bien , tengo una instrucción

Código Delphi [-]

Try

with tabla2 do
begin

    First;
     while not eof do
       begin
         insertaarticulo('tabla1') // procedimiento donde va a por los articulos de la tabla1.
         Next;
       end;

end;

except;
end; // end del except , por si se encuentra una excepción , no haga nada.

El caso es que si en la tabla1 , tengo esta lista .

Articulo1
Articulo2
Articulo1
Articulo3

pues copia el articulo1 , el articulo2 y luego al encontrar el articulo1 otra vez , pues key violation , y se para , yo quiero que si encuentra el articulo1 , y esta repetido y es una key violation , se lo salte , pero luego si me añada el articulo 3 .

Por que tal y como tengo el código , me sale esto en la tabla2 :

Articulo1
Articulo2

y ya esta ....

Mick 28-07-2006 19:17:48

El problema es debido a que el try except no esta en el lugar adecuado, tal como esta puesto, la excepcion salta al except saliendo del bucle, no te aparecera ningun mensaje en la pantalla pero acabara la funcion en este punto. El Except es como un goto, desde la linea que de error se salta al except y se continua por ahi, saliendose del bucle:

Tendras que hacer algo parecido a:
Código:


with tabla2 do begin
  First;
  while not eof do begin
      try insertaarticulo('tabla1')
      except end;
      Next;
  end;
end;

Añado que no se aconseja nunca poner un except vacio que ignore completamente todas las excepciones, aunque esto ira bien para que funcione
el codigo como quieres, si se produjesen otros errores por otras causas (por ejemplo que la base de datos este corrompida o cualquier otra cosa),
no te enterarias y tampoco tendrias ningun pista para saber porque no funciona el codigo.
Asi que es preferible en el except asegurarse de que la excepcion que esta dando es la de key violation para continuar , y si es otro tipo de error,
apuntarlo en algun sitio, o mostrar un mensaje de error al usuario o lo que sea para saber que esta pasando algo extraño.

Saludos

Saludos


La franja horaria es GMT +2. Ahora son las 04:16:12.

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