Checar se CPF ja existe [RESOLVIDO]

Pessoal, estou tentando incluir uma validação no BeforeInsert para não deixar cadastrar CPF repetido, não estou usando regra no banco devido a permitir vazio porém se for válido eu estava querendo checar, dar mensagem e vazar fora.

Usei o código.

if ({tbp_cpf}<>’’)
{
$check_sql = ‘select count(*) from tb_pacientes where tb_pacientes.tbp_cpf = "’.{tbp_cpf}.’" and id_paciente <> '.{id_paciente};
sc_select(dataset, $check_sql);
if (false == {dataset})
{
// Error while accessing database
}
elseif ({dataset}->EOF)
{
// No record found
}
else
{
echo(“ja tem, o cpf”);
sc_error_message(‘Atenção, o CPF: ‘.{tbp_cpf}.’ Já existe!’);
}
}

Mas não retorna nada.

Claudney

@Claudney pelo o que eu entendi você esta pedindo que o sql retorne a contagem da tabela paciente quando o cpppf for igual ao cpf igitado e o id for diferente do id digitado. Se eu não entendi errado essa instrução nunca vai retornar nada pq teoricamente seu id nunca vai ser diferente do id digitado devido essa informação vir do banco, correto?

1 Curtida

Boa Tarde,

@Bruno_Santos, realmente, as vezes a gente fica procurando erro de um lado e está em outro, muito obrigado! Deu Certinho!

Claudney

1 Curtida

Um detalhe importante de conceito. O evento que você está colocando seu código é o BeforeInsert, significa que ele é disparado antes de um insert. Logo a verificação do ID, não se faz necessária, pois é uma inserção, só existiria em caso de BeforerUpdate.

Outro ponto importante que simplifica seu código é manter este count, porém no IF, verificar apenas se o count é > 0, sendo maior que zero o CPF é duplicado e você retorna erro. Não precisa tratar ELSEs.

Att.

André.

Saudações, acabei resolvendo assim.

Criei no evento onvalidate, retirei o count e passei a ver apenas o código, na condição que valido se o cpf é <> ‘’ e codigo = ‘’ fiz assim !empty(cpf) e empty(codigo), assim vai ser feito apenas na inclusão, até que enfim funcionou corretamente, sem efeitos colaterais.