Peter,
Estava pensando no seguinte... Observe as duas mensagens de erro abaixo:
1526 - [Microsoft][ODBC SQL Server Driver][SQL Server]INSERT statement conflicted with COLUMN CHECK constraint 'Clientes_Cfp_Formato'. The conflict occurred in database 'Estudo', table 'Clientes', column 'Cpf'.
1526 - [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of UNIQUE KEY constraint 'Clientes_CPF_Unico'. Cannot insert duplicate key in object 'Clientes'.Nestes dois casos, eu recebo o nome da constraint que causou o erro: Clientes_Cpf_Formato e Clientes_CPF_Unico - certo?
Bom... Pensei em criar uma tabela interna do sistema (ou até mesmo no SQL Server) com a seguinte estrutura:
Regra Mensagem
Clientes_Cpf_Formato CPF/CNPJ inválido
Clientes_CPF_Unico CPF/CNPJ duplicado
Depois, isolo o nome da constraint que causou o erro. Faço um select na tabela SQLErros e acho a mensagem que irá para o usuário.
Se não encontrar a REGRA (ou o campo mensagem estiver vazio), mostro a própria mensagem do SQL pro usuário e gero um registro em branco nesta tabela de erros. Assim, basta eu filtrar as mensagens em branco para saber quais Regras já aconteceram e eu não fiz a mensagem de erro ainda.
Estou começando no SQL e não sei se vai acontecer alguma situação onde isso não funcionaria... Você sabe me dizer?
Para facilitar, pensei em criar nomes para constraint do tipo: ERRO_Clientes_Cpf_Formato_ERRO e usar StrExtract com os limitadores ERRO_ e _ERRO para pegar a string que vou procurar na tabela SQLErros!
[]s!
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rodolfo Duarte