¡Hola!
Hace tiempo busqué lo mismo, pero al parecer no hay un mecanismo SQL estándar para el tratamiento de errores y muchos motores no ofrecen información detallada más que en mensajes de texto. Así que, en el caso de Firebird, lo que hice fue implementar un
analizador sintáctico (
parser en inglés) para los mensajes de error más comunes.
Extrayendo de esos mensajes los nombres de las restricciones, podrás entonces consultar las
tablas del sistema para informarle al usuario con mayor precisión qué tabla y / o campo no pasó alguna validación de la base de datos.
Dentro del evento OnReconcileError, E.Message contiene el mensaje de error emitido por el servidor. Algunos ejemplos de Firebird / InterBase son:
Cita:
SQL Server Error: validation error for column NOMBRE, value "*** null ***"
|
(campo Not Null vacío)
Cita:
SQL Server Error: attempt to store duplicate value (visible to active transactions) in unique index "IXDEPARTAMENTONOMBRE"
|
(índice de unicidad violado)
Cita:
SQL Server Error: violation of FOREIGN KEY constraint "FKDEPARTAMENTOIDEMPLEADOR" on table "DEPARTAMENTO"
|
(llave foránea inválida o intento de eliminarla teniendo dependencias)
En las páginas de este foro encontrarás temas relacionados con el análisis sintáctico ("
parseo") de cadenas de caracteres y también sobre las tablas del sistema de Firebird / InterBase.
En Internet también encontrarás un componente llamado MagiaFirebirdSQLConnection que viene con esta característica integrada, sólo que es de paga.
Un abrazo.
Al González.