Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2014
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Poder: 21
gorsan Va por buen camino
Captura Excepcion contravención Primary key en tabla

Buenos días.
Recurro de nuevo a ustedes.
Necesito capturar el mensaje que emite interbase cuando se pretende violar una primary key para lanzar yo mi propio mensaje y después manejar lo ocurrido con algo así:

Código Delphi [-]
   try
   ..../....
    inserción de registro
     .../....
   except
    Datamodule.IBTabla.Cancel;
    raise Exception.Create('Existe un registro con ese nombre');
    exit;
   end;

Pero no me funciona porque no lo considera una excepción ya que ni siquiera pasa por código de except.
¿Tienen alguna idea que me pueda ayudar?
Responder Con Cita
  #2  
Antiguo 23-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues si no pones el código, no podemos imaginarlo
Responder Con Cita
  #3  
Antiguo 23-03-2014
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Poder: 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
  #4  
Antiguo 23-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero pon el post dentro del try except

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

    DMFicha.IBFicha.Post; ¡¡¡¡¡¡¡¡¡¡¡AQUI ES DONDE SALTA EL ERROR!!!!!!!!!!!!!!!!!!!!!!!

   except
    DMFicha.IBFicha.Cancel;
    DMFicha.IBTodos.Cancel;
    raise Exception.Create('Existe un trabajador con ese nombre');
    exit;
   end;
   
end;
Responder Con Cita
  #5  
Antiguo 23-03-2014
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Poder: 21
gorsan Va por buen camino
Hal ....
Que cosa mas simple. Imperdonable. Se me queda cara de tonto y no se que mas decir.

Gracias Casimiro.
Responder Con Cita
  #6  
Antiguo 23-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para saber, viajar y leer
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TDateEdit captura de excepcion Panasys OOP 2 04-07-2013 02:02:33
Error de Primary Key AnuardMichelen SQL 14 19-10-2011 17:30:11
Actualizar campo de tabla después de excepción Axel_Tech Firebird e Interbase 7 27-09-2010 21:04:17
limpiar tabla y primary key a 0 JXJ Firebird e Interbase 1 20-05-2010 16:17:32
primary key AMO SQL 7 14-02-2004 20:50:05


La franja horaria es GMT +2. Ahora son las 21:10:52.


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
Copyright 1996-2007 Club Delphi