Desarrollo aplicaciones con Delphi y los gestores de base de datos Firebird y PostgreSQL.
El problema que tengo que solucionar es desplegar mensajes de error apropiados, cuando el error se produce del lado servidor, es decir, en la base de datos.
Básicamente, los errores que debería manejar son los siguientes:
- Violación de clave foránea, al eliminar o editar algún registro.
- Violación de clave primaria (o única).
- Violación de campos requeridos (campos NOT NULL).
Estuve considerando varias opciones para solucionar este problema; los cito a continuación, especificando sus inconvenientes asociados:
- Utilizar la propiedad Required de los TField de un TDataSet, de manera a poder realizar el control de campos requeridos del lado cliente. El inconveniente con esto es que dicha propiedad nada tiene que ver con la restricción del campo en la base de datos, si cambia un campo de la base, es decir, si deja de ser o se vuelve requerido, habría que cambiar eso también en la aplicación y recompilarla.
- Capturar el código de error ocurrido en la base de datos y mapearlo a un mensaje apropiado según el significado del mismo. El inconveniente con esto es que no funciona con PostgreSQL, sí con Interbase o Firebird. Talvez haya otros gestores con los que tampoco funcione. En fin, no es una solución general.
- Crear triggers que verifiquen los tres tipo de violaciones mencionados más arriba y de acuerdo al caso lanzar una excepción con un mensaje correspondiente, que sea entendible por el usuario común. Al parecer esta es la opción más general pero a la vez más trabajosa, tampoco es muy portable si llegásemos a cambiar de gestor, pero por lo menos dejamos el control solo de un lado (el del gestor).
Será que existe algún mecanismo conocido por Ustedes que pueda ayudarme a solucionar este problema. Qué pueden decir al respecto.
Desde ya muchas gracias.