Ver Mensaje Individual
  #2  
Antiguo 09-03-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡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.
Responder Con Cita