FS
Traduzir exceções para registros repetidos
Fechado
Boa tarde pessoal,
Alguém pode me dar uma dica de como tratar a mensagem para a exceção de quando identificar dados repetidos num cadastro? Por exemplo, eu tenho o campo "Matrícula" no meu formulário de cadastro. No banco de dados mysql eu já defini o campo como Unique. A regra está funcionando perfeitamente, o que eu quero fazer é personalizar a mensagem de erro e deixá-la como as mensagens das demais validações do Adianti. (Estou utilizando o layout ERP II). Então, eu preciso saber em qual exceção eu preciso trabalhar e como adicionar a mensagem correta.
A mensagem atual está apresentando desta maneira:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2222' for key 'matricula'
Gostaria que aparecesse assim:
Registro Duplicado!
ou
Matrícula 'XXXX' já cadastrada!
Obrigado.
Alguém pode me dar uma dica de como tratar a mensagem para a exceção de quando identificar dados repetidos num cadastro? Por exemplo, eu tenho o campo "Matrícula" no meu formulário de cadastro. No banco de dados mysql eu já defini o campo como Unique. A regra está funcionando perfeitamente, o que eu quero fazer é personalizar a mensagem de erro e deixá-la como as mensagens das demais validações do Adianti. (Estou utilizando o layout ERP II). Então, eu preciso saber em qual exceção eu preciso trabalhar e como adicionar a mensagem correta.
A mensagem atual está apresentando desta maneira:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2222' for key 'matricula'
Gostaria que aparecesse assim:
Registro Duplicado!
ou
Matrícula 'XXXX' já cadastrada!
Obrigado.
.
Bom dia Leandro, tudo certo?
Não entendi sua mensagem. Você sabe como devo fazer para alterar a mensagem desta exceção?
Abraço.
Não testei mas acho que é por ai...
catch (Exception $e) // in case of exception
{
if($e->getCode() ==1062){
new TMessage('error', 'Error ' . 'Registro já existe');
}else{
new TMessage('error', 'Error ' . $e->getMessage()); // shows the exception error message
}
TTransaction::rollback(); // undo all pending operations
}
Felipe,
É na função onSave que devo fazer este tratamento?
Obrigado.
existe essa contribuição na epoca não entendi muito bem pois acredito que somente precisamos tratar o erro igual fazia nos tempo de visual basic.
adianti.com.br/forum/pt/view_1103?tuniquevalidator
no onSave da sua classe la no final deve haver esse tratamento de erro é só alterar essa parte do código que postei depois me diga o resultado pois não testei hj é segunda rsrs
Eu testei, mas apresentou a mesma mensagem, a padrão.
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2222' for key 'matricula'
posta seu codigo onSave ae.
Este é o que eu tinha feito, onde está tratando apenas as validações (campos obrigatórios).
Corrige ai onde é if($e->getCode() ==1062) na verdade é if($e->getCode() ==23000) testei aqui funciona direitinho.
Eu tinha testado assim Felipe, mas testei novamente para ter certeza. A mensagem continua a mesma.
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2222' for key 'matricula'
Eu já tentei de várias formas, mas sem sucesso. Vou te passar o código inteiro desta minha classe, talvez vc identifique algo que eu não tenha visto.
Obrigado.
Fabiano, eu coloquei a mensagem com o ponto, só para acompanhar o topico, para ver as dicas.
Abraço.
Ok Leandro,
Ainda não tive sucesso, estou pesquisando.
Abraço.
People,
Prefiro usar essa outra solução:
https://soprogramando.wordpress.com/2011/09/29/traduzir-as-mensagens-do-mysql-para-o-portugues/
Simplesmente para evitar muitos IFs específicos no código-fonte que provavelmente deixarão de funcionar se trocar de banco de dados...
Abs!
Bom dia,
Pablo, ficou melhor desta forma que você nos orientou. Só estou com dificuldades em achar no meu servidor web, onde encontro o arquivo my.ini, no meu computador foi tranquilo. Mas valeu, vou garimpar pra encontrar.
Abraços.