Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2006
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
Control Errores en Firebird

Bueno, seguimos con las preguntas(estaréis hartos de ver hilos de Joanajj, pero gracias a estas consultillas y lo que leo en manuales via web voy avanzando y he hecho mis pinillos con Firebird).

Sabe alguien como controlar los errores que se generan en Firebird, por ej. cuando se duplica un índice UNIQUE se lanza un error que dice que el valor está duplicado en un campo que es UNIQUE(algo así, creo que se entiende), y la pregunta es si ese error lo puedo gestionar desde código de forma que si se produce un error haga una cosa u otra, o lance un mensaje. Algo como los TRY EXCEPT de Delphi ...

Saludos y gracias de nuevo...
Responder Con Cita
  #2  
Antiguo 27-05-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Te pongo un ejemplo, este código lo escribes en el evento OnPostError de tu tabla que es donde se detectarán los errores de registros duplicados.

Código Delphi [-]
procedure TForm1.Table1PostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  if EIbInterbaseError(E).IBErrorCode=isc_unique_key_violation then
  begin
     ShowMessage('Registro duplicado');
     Action:=daAbort;
  end;
end;

En este caso el mensaje se muestra si se produce un error de tipo isc_unique_key_violation, existen otras constantes definidas para controlar el resto de los errores.

Saludos
Responder Con Cita
  #3  
Antiguo 31-05-2006
JCDiaz999 JCDiaz999 is offline
Registrado
 
Registrado: sep 2005
Posts: 4
Poder: 0
JCDiaz999 Va por buen camino
Hola joanajj

Supongo que te refieres a controlar errores en procedimientos almacenados.
Yo tengo en algún procedimiento algo como esto:



Código SQL [-]
FOR SELECT CODIGO, CAMPO1, CAMPO2
FROM INTERFAZ_DATOS
WHERE TRATADO='N'
INTO S_CODIGO, S_CAMPO1, S_CAMPO2 DO
BEGIN
INSERT INTO TABLA_XXX ....
----

UPDATE INTERFAZ_DATOS
SET TRATADO='S'
WHERE CODIGO=S_CODIGO

WHEN ANY DO
BEGIN
INSERT INTO LOG_ERRORES -----
END
END






Este bucle recorre registros de la tabla INTERFAZ_DATOS, va insertando en TABLA_XXX y marca el registro actual como ya tratado.
Si en el insert se produce alguna excepción, salta al WHEN ANY sin pasar por el update. Se inserta en LOG_ERRORES y continua el bucle.
De este modo podemos recorrer todo el bucle. Donde se produzca algún error podemos hacer algo distinto.

Supongo que además te interesará actuar de distinto modo si en error es de primary key, de foreign key, tipo de dato. No lo he probado aún, pero mirando en la documentación de firebird aparecen cosas como:


<FONT face=Courier><FONT size=2><DIV class=frame_codigo_sql>Código SQL [-]<DIV class=texto_codigo_sql id=sql_div_447dcf379d02e><FONT face=Courier>
Responder Con Cita
  #4  
Antiguo 01-06-2006
joanajj joanajj is offline
Miembro
 
Registrado: jul 2003
Posts: 144
Poder: 21
joanajj Va por buen camino
Gracias por la respuesta

Gracias por las respuestas, pero en concreto me refería a algo como lo que sugiere Hector. Controlar los errores que lanza Delphi ante un error de Firebird, por ej. cuando se pierde la relacion entre las clave foránea y primaria de dos tablas, o algo así. Que no se vaya abajo la aplicación, sino que yo gestione el error.

Un saludo...
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
Errores en tablas firebird vlinares Conexión con bases de datos 0 17-03-2005 09:25:50
Control y captura de errores in acceso BBDD Interbasse con ibExpress radiohead Conexión con bases de datos 1 05-11-2004 11:13:22
Control de errores Sql MITOPE Conexión con bases de datos 3 23-07-2004 10:48:49
Control de errores y saber filas en DBGrid RyAr Conexión con bases de datos 6 08-07-2004 13:57:55
Control de errores en bd Isaac Varios 5 17-02-2004 19:19:34


La franja horaria es GMT +2. Ahora son las 06:06:59.


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