![]() |
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... |
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.
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 |
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> |
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... |
La franja horaria es GMT +2. Ahora son las 13:09:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi