[RESOLVIDO] - Personalizar Mensagem de Erro - Chave Única - Setada no BD Mysql

Boa tarde pessoal.
Tenho no banco uma regra onde não se pode gravar 2 registros com o mesmo nome.
O usuário ao tentar fazer isso é gerado um erro.
Gostaria de saber se tem como personalizar essa mensagem.

“[font=verdana]Erro ao alterar a base de dados:[/font]
Duplicate entry ‘xx’ for key ‘nome_do_campo_UNIQUE’
[font=verdana]View SQL[/font]

Celso, boa tarde!!

Será que isso te ajuda?

sc_error_insert: Esta macro configura a variável que contem a mensagem de erro do banco de dados que pode ocorrer durante a inclusão de um registro.

Nunca usei essa macro, mas pelo que me parece faz isso que vc está precisando.

Boa tarde Thiago.
Tentei assim mas sem sucesso no evento onAfterInsert do Form múltiplos registros:

if (!empty({sc_error_insert})) { //sc_rollback_trans(); echo 'texto 1'; sc_error_exit(); } else { //sc_commit_trans(); echo 'texto 2'; }

Cria o metódo PHP: checar_duplicidade

if (sc_btn_new) {

	/* Macro sc_lookup */

	$cpf_pesquisa={CPF};

	sc_lookup(ass,"
	SELECT
	   Plano,
	   Codigo,
	   Nome
	FROM
	   associados
	WHERE 
	   CPF = '$cpf_pesquisa'
	");

	/* Erro no lookup */
	if (FALSE === {ass}) {
		sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
	}
	elseif (empty({ass})) { /* EOF */
		// Esta tudo Ok, pode continuar a Inclusão.
	}
	else {
		   If ({CPF}>0) {
			   sc_error_message('Associado CPF já Cadastrado no Plano: '.{ass[0][0]}.'-'.{ass[0][1]}.".<BR>");
		   }
	}

}
  1. Ai chama ele no Evento Ajax OnBlur do campo que não pode ser repetido.
    checar_duplicidade();

  2. Coloca no Onvalidate Também.
    checar_duplicidade();

Caro Jailton boa tarde.Esse método já utilizo.
Queria melhorar utilizando os recursos do próprio banco de dados.

Para personalizar a mensagem vá em Aplicação > Mensagens e escreva a mensagem no valor do campo: Violação de chave única

Já fiz isso anteriormente.
Não funciona quando se tem a regra no BD.

Faz um teste, transforma esse formulário multi-registros em 1 registro:
Ai no OnAfaterInsert Coloca:
if (!isset({sc_error_insert}) {
echo “Gravado!! Sucesso!!”."
";
}else{
echo “Erro: {sc_error_insert}”."
";
}
break;

Ai se der certo volta ele para multi-registros e testa, se DER erro ‘o sc ignorar’ ai passa para o SUPORTE.
bugs@netmake.com.br

Vou testar.

A macro está sendo usada de maneira incorreta.

Veja a documentação: http://www.scriptcase.com.br/docs/pt_br/v81/macros-scriptcase/macros-scriptcase#sc_error_continue

Exemplo:
sc_error_continue(“delete”);
if (!empty({sc_erro_delete}))
{
$tmp = strrpos({sc_erro_delete}, “]”);
if ($tmp !== false)
{
{sc_erro_delete} = substr({sc_erro_delete}, $tmp + 1);
}
sc_error_message({sc_erro_delete});
sc_erro_exit;
}

No teu caso, usar no evento OnBeforeInsert
“sc_error_continue(“insert”);
if (!empty({sc_erro_insert}))…”

Funcionou a dica do Ronyan.
Com a seguinte ressalva:
Utilizei nos seguintes eventos: onAfterInsert; onAfterUpdate;
Com isso as mensagens foram personalizadas.
Mas surgiu uma duvida.
Na tabela tenho 3 campos sendo 2 deles não podem se repetir configurado no próprio banco de dados.
O usuário preenche o campo1 e depois o campo2 mas somente o campo2 já possui cadastro na tabela, e o banco retorna o erro.
Como informar para o usuário que somente o campo2 está errado e precisa ser alterado?

sc_error_continue("insert"); if (!empty({sc_erro_insert})) { $tmp = strrpos({sc_erro_insert}, "]"); if ($tmp !== false) { {sc_erro_insert} = substr({sc_erro_insert}, $tmp + 1); } sc_error_message('Já cadastrado no Banco de Dados'); sc_erro_exit; }

Na mensagem de erro retornada pelo banco de dados, terá o nome da coluna que ocasionou a exceção.
No tratamento da substr , você pode extrair o nome deste campo, e com um if, fazer a validação de qual campo foi a exceção, e colocar na mensagem para ser exibida.

Ok Ronyan.
Obrigado.