Ver Mensaje Individual
  #12  
Antiguo 03-06-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Si quitas la sentencia WHEN ANY DO SUSPEND de tu procedimiento, la parte donde tratas las excepciones te dirá cuál es la excepción que se ha generado.

Código Delphi [-]
   except
      on e:exception do 
      begin
         Showmessage(e.message); //Esto te mostrará el texto de la excepcion
         Q1.Transaction.Rollback;
         Q1.FreeHandle;
         raise;
      end;
   end;

De todos modos, la filosofía de las excepciones es diferente a lo que parece que haces tu:
- Las excepciones hay que tratar de no utilizarlas.
- Consumen muchos recursos.
- Si salta una excepción hay que volver atrás todo lo que se ha hecho hasta entonces.
- Normalmente se puede evitar la excepción.

Por ejemplo:
Si tienes un procedimiento que divide dos valores, tienes dos opciones:
  • Verificas con un if si el divisor es distinto de 0 antes de realizar la división y si es 0 muestras un mensaje de error.
  • Realizas la división. Si salta la excepción la capturas y muestras un mensaje de error.

Supongo que lo mejor en tu caso (creo que estás insertando registros) es verificar si existe y sobrepasa un valor dado.

Código SQL [-]
   /* Sumo importe */
   select sum(importe) from tabla where condiciones
   into :importe;

   /* Verifico que no me paso del valor maximo */
   if (importe<=VALOR_MAXIMO) then
   begin
      /* Verifico que no exista para poder insertarlo */
      if (not exists(select importe from tabla where condiciones)) then
          insert into tabla (campos) values (valores);  
 
      else
         /* Si existe lo meto en tabla de errores que mostraré al usuario */
         insert into tabla_errores (detalles) values ('YA EXISTE EL VALOR A INSERTAR');
   end
   else
        /* Si sobrepasa el importe maximo lo meto en tabla de errores que mostraré al usuario */
       insert into tabla_errores (detalles) values ('SE SUPERA EL IMPORTE');

Última edición por duilioisola fecha: 03-06-2008 a las 13:56:51.
Responder Con Cita