Sugestão - Chave Unica

Olá,

Eu já sugeri varias x, e estou postando novamente esta sugestão…

Que a chave unica tenha uma opção de somente validar quando tiver informação no campo.

Ex. Chave Unica no campo CPF.

Se o usuário digitar o CPF. o sistema verifica se o CPF já está cadastrado, caso o usuário deixa em branco, o sistema não valida e concluir o cadastro…

Eu praticamente não consigo usufruir desse recurso Chave Unica, por esse motivo, tendo que escrever o código.

ah, aproveitando a oportunidade, se tiver a possibilidade de personalizar a mensagem da chave unica melhor ainda… pois a mesma dependendo da combinação dos campos a mensagem não fica clara para o usuário final.

Att - Régis

E permite gravar em branco?
Se a chave é única deve ser obrigatório os valores preenchidos.
Não faz sentido.

Então Haroldo, é que depende muito da rega de negocio.

Eu tenho muitas validações que tive que fazer na mão por que a chave unica não tem essa flexibilidade que deveria ter.

Um ex. ao preencher o cpf, ele valida chave unica.

Caso não preencha(Menor de idade) ele não valida… pois nesse exemplo o CPF não é um dado obrigatório.

Como o CPF não é um dado obrigatório e no sistema precisa validar somente quando digita dado no campo para não deixar cadastrar 2 cpf iguais… ex. nesse caso tenho que escrever o código da validação.

então não coloque como chave única obrigatória.

E teste a mesma no seu evento ajax onchange.

Realmente, se no banco de dados o CPF está como chave única, não há como gravar VAZIO em 2 registros.
Entretanto, você consegue gravar NULL.

E este é o meu caso: na tabela do meu banco de dados tenho a coluna CPF que aceita NULL e é ÚNICA. Preciso gravar NULL quando o campo CPF estiver vazio, desta forma não irei infringir as regras do banco de dados.

O ideal, na minha opinião é que o sc gravasse NULL quando um campo estivesse vazio ou, pelo menos, que tivesse a opção de gravar NULL ou VAZIO quando o campo estivesse vazio…

Mal acabei de postar minha sugestão, encontrei uma solução :-D:

No banco de dados:

  • A coluna CPF deverá estar com o DEFAULT VALUE = NULL

No Scriptcase:
Nas configurações do campo CPF, em “Valor no Banco de Dados”

  • Informe “Calculado pelo banco de dados se vazio” tanto para “Inserção” quanto para “Atualização”
  • Crie a chave única para CPF

:smiley:

Uma pequena correção à minha postagem anterior:

Nas configurações do campo CPF, em "Valor no Banco de Dados" - Informe "Calculado pelo banco de dados se vazio" tanto para "Inserção" quanto para "Atualização"
Informe "Calculado pelo banco de dados se vazio" [b]APENAS para "Inserção"[/b]. Na atualização, o SC vai ignorar a atualização caso o campo esteja vazio...

E, para corrigir este problema, acrescentei o código abaixo no evento onAfterUpdate():

[code]// mudando campo CPF de ‘’ para null
$sql = “UPDATE pacientes SET
cpf= NULL
WHERE id = ‘{id}’
AND cpf = ‘’”;

sc_exec_sql($sql);[/code]

Não é tão “bonito” como eu gostaria… mas resolve (eu acho :-P)

Espero que ajude. Eu utilizo no evento Ajax (onChange) do campo CNPJ ou CPF:

if(!empty({cnpj})) {
sc_lookup(conclie,“select nome, cnpj (ou CPF), endereco from clientes where cnpj=’{cnpj}’”);
$nome={conclie[0][0]};
$cnpjconf={conclie[0][1]};
$endereco={conclie[0][2]};
if(!empty($cnpjconf)) {
sc_error_message("".$cnpjconf." - “. “existe para:
”.$nome.”
");
sc_set_focus(‘cnpj’);
//{cnpj}=’’;

	ocultabtnincluir();  //Método PHP
	
	}
else {
	exibebtnincluir();  //Método PHP
	}

}