Ver Mensaje Individual
  #3  
Antiguo 23-03-2014
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Reputación: 21
gorsan Va por buen camino
La excepción salta en el servidor no en el cliente, que no ve la excepción y al hacer la actualización de la tabla es cuando se queja. Por eso el código que he descrito en mi anterior mensaje no funciona porque no pasa por el bloque except.

En el servidor:
Código SQL [-]
CREATE TABLE "TODOS" 
(
  "CONTADOR"  "N_ORDEN" NOT NULL,
  "PRIMER_APELLIDO"  "PRIMERAPELLIDO" NOT NULL,
  "SEGUNDO_APELLIDO"  "SEGUNDOAPELLIDO" NOT NULL,
  "NOMBRE"  "NOM" NOT NULL,
   "ALTA"  "FECHAALTA" NOT NULL,
  "BAJA"  "FECHABAJA",
  "YEAR"  SMALLINT,
  "MES"  VARCHAR(10),
 PRIMARY KEY ("CONTADOR"),
 UNIQUE ("PRIMER_APELLIDO", "SEGUNDO_APELLIDO", "NOMBRE")
);
Esta definido como unique la unión de primer apellido, segundo apellido y nombre. Cuando se intenta insertar un registro que ya esta en la tabla con esos tres datos, evidentemente salta el "constraint" de la misma. Y yo lo que quiero es capturar esa excepción y que no sea el motor de interbase quien lo haga. No se como implementarlo

En el cliente:

Código Delphi [-]
   Hoy:= Now;
   DecodeDate(Hoy, Year, Month, Day);
   try
    DMFicha.IBTodosCONTADOR.AsInteger:=StrToInt(WFicha.DBCONTADOR.Text);
    DMFicha.IBTodosPRIMER_APELLIDO.AsString:=WFicha.DBPRIMER_APELLIDO.Text;
    DMFicha.IBTodosSEGUNDO_APELLIDO.AsString:=WFicha.DBSEGUNDO_APELLIDO.Text;
    DMFicha.IBTodosNOMBRE.AsString:=WFicha.DBNOMBRE.Text;
    DMFicha.IBTodosALTA.AsDateTime:=StrToDate(WFicha.DBALTA.Text);
    DMFicha.IBTodosBAJA.AsString:='';
    DMFicha.IBTodosYEAR.AsInteger:=Year;
    DMFicha.IBTodosMES.AsString:=IntToStr(Month);
   except
    DMFicha.IBFicha.Cancel;
    DMFicha.IBTodos.Cancel;
    raise Exception.Create('Existe un trabajador con ese nombre');
    exit;
   end;
   DMFicha.IBFicha.Post; ¡¡¡¡¡¡¡¡¡¡¡AQUI ES DONDE SALTA EL ERROR!!!!!!!!!!!!!!!!!!!!!!!
end;

No se como implementar este error. Supongo que habría que hacerlo desde el servidor con algún Stored procedure y un trigger pero no tengo ni idea de como capturar esa excepción.
Responder Con Cita