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.