como evitar duplicidade de dados em um cadastro?

Delphi

09/07/2004

como faço para evitar o cadastro de alguem duas vezes?

por exemplo:

o operador cadastro os dados de uma pessoa chamada joão da silva santos, e sem querer o operador vai digitar o mesmo cadastro, como faço para evitar que este joão da silva santos seja incluido de novo e sem falar que poder haver outro joão da silva santos mas com os dados diferentes. :?:


Duilinho

Duilinho

Curtidas 0

Respostas

Tuiobecker

Tuiobecker

09/07/2004

Ola

vc deve ter uma chave primaria na sua tabela, caso ela for o nome, nao serao cadastrados dois nomes iguais, mas pense assim, se for o nome a chave primaria, vc nao podera cadastrar duas pessoas diferente mas com o mesmo nome.

flw


GOSTEI 0
Dankada

Dankada

09/07/2004

vc tem que ter uma chave primaria ,essa chave naum pode se repetir, para verificar se ja exite vc faz uma busca na tabela.


GOSTEI 0
Gandalf.nho

Gandalf.nho

09/07/2004

Não é necessário uma chave primária, basta um índice único (que não permite valores iguais).


GOSTEI 0
Horus

Horus

09/07/2004

Eu já passei por um problema parecido e resolvi da seguinte forma:

1. Coloquei uma Query no form.
2. No evento OnExit do DBEdit que é responsável pela entrada de dados no campo coloquei uma pesquisa usando a query para retornar qualquer registro da tabela que seja igual ao que está sendo inserido.
3. Se a query retornar algum registro executa uma ShowMessage de registro já incluido ou registro igual a outro.

Espero ter ajudado.


GOSTEI 0
Rodolpho123

Rodolpho123

09/07/2004

Além desta maneiras citadas acima, vc pode também fazer assim:

Crie um campo, tipo [b:8dd932e328]cpf[/b:8dd932e328] para cada cliente inserido. Quando vc for inserir um novo registro, verifique se o [b:8dd932e328]cpf[/b:8dd932e328] do novo cliente foi encontrado (Locate para Tables, Select para Queries). Aí vc pode criar uma rotina de tratamento à seu gosto para esta operação.


GOSTEI 0
Helton Garrido

Helton Garrido

09/07/2004

Mas como ficaria este código no OnExite, por favor
GOSTEI 0
Helton Garrido

Helton Garrido

09/07/2004

Mas como ficaria este código no OnExite, por favor

1. Coloquei uma Query no form.
2. No evento OnExit do DBEdit que é responsável pela entrada de dados no campo coloquei uma pesquisa usando a query para retornar qualquer registro da tabela que seja igual ao que está sendo inserido.
3. Se a query retornar algum registro executa uma ShowMessage de registro já incluido ou registro igual a outro.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/07/2004

Pessoal, vocês desconsideraram a possibilidade de haver mais de uma pessoa com o mesmo nome e sobrenome (sabemos que existe muitos casos assim).
Você pode incluir um outro tipo de validação, como o CPF ou RG, pois esses sim sabemos que devem ser únicos.
Acredito que seja esse o método mais utilizado e mais recomendado.
GOSTEI 0
Marlon Minotti

Marlon Minotti

09/07/2004

Exato, como a Marisiana disse. Particularmente acho que todos acima,exceto a Marisiana e o Rodolpho123, entenderam o problema do nosso amigo errado. Ele só quer saber como fazer para não inserir a mesma pessoas mais de 1 vez. A maior e mais provável lógica para isso é verificar se o CPF ou RG já existe como a Marisiana disse. no Evento OnClick do seu botão Salvar, se acaso tiver, faça com que uma query sua dê um select no banco buscando pelo CPF se já existe, se retornar algum valor você deve bloquear a inserção do novo registro, se a query vier vazia é porque não existe ninguém com o mesmo CPF, daí você insere o novo registro.

Simples assim, VLWs FLWs.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/07/2004

Obrigada por complementar Marlon!!
Mas ele não pode criar um INDEX no campo CPF ao invés de ficar fazendo um select para verificar?
Com o INDEX ele não vai conseguir inserir valores duplicados e quando acontecer uma tentativa de inserção duplicada, ocorre um erro, então ele só teria que tratar esse erro...

Exemplo de sintaxe no Oracle:
CREATE UNIQUE INDEX ON dept_unique_index dept (dname)
       TABLESPACE indx;
GOSTEI 0
Helton Garrido

Helton Garrido

09/07/2004

Boa tarde, Marisiana, mais teria como você fazer um exemplo de como ficaria este seu código? Pois estou tendo o mesmo problema e o meu sistema eu uso CPF e não estou conseguindo.

Minha tabela é CLIENTE e o campo CPF

Já coloquei na OnExit da DBEDit o seguinte código:
If dm.tbCliente.Locate('CPF',DBEdit5.Text,[loCaseInsensitive, loPartialKey]) Then
     Begin
        MessageDlg('Este paciente já se encontra cadastrado na Base de Dados!',mtWarning,[MBOK],0);
        DBEdit5.SetFocus;
     end;                                                                                
GOSTEI 0
Jerson Boer

Jerson Boer

09/07/2004

Olá Helton e Duilinho,

Uma forma prática e limpa de fazer uma validação dessa é você criar uma função a ser chamada quando você der o Salvar do registro (momento em que todos os seus dados já estão preenchidos e não fica a informação em Exit de campo). Eu passaria pelo menos 2 parâmetros na função (IDCliente e CPF) e essa função ter uma query (crie o componente em tempo de execução) que vá buscar em seu banco de dados
Select * from Cliente where CPF = X and IDCliente <> Y
e essa função te dar um Result de True/False.

Complementando, no seu salvar você vai fazer:

if FuncaoCliente(IDCliente,CPF) = True then
begin
-- Sua mensagem de que o registro já existe
end
else
begin
-- Seu processo de salvar o registro
end;


Vejam aí, qualquer coisa retorno com a função mais detalhada.
GOSTEI 0
Jerson Boer

Jerson Boer

09/07/2004

Obrigada por complementar Marlon!!
Mas ele não pode criar um INDEX no campo CPF ao invés de ficar fazendo um select para verificar?
Com o INDEX ele não vai conseguir inserir valores duplicados e quando acontecer uma tentativa de inserção duplicada, ocorre um erro, então ele só teria que tratar esse erro...

Exemplo de sintaxe no Oracle:
CREATE UNIQUE INDEX ON dept_unique_index dept (dname)
       TABLESPACE indx;


Mariana, agora que observei sua resposta sobre criar o index e não o select, dando minha opinião, se ele tiver um tipo sistema (como o meu) onde o cadastro de cliente pode sofrer revisões e e deverá manter as versões anteriores a indexação do CPF pode ser um problema.
GOSTEI 0
POSTAR