como evitar duplicidade de dados em um cadastro?
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. :?:
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
Curtidas 0
Respostas
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
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
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
09/07/2004
Não é necessário uma chave primária, basta um índice único (que não permite valores iguais).
GOSTEI 0
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.
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
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.
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
09/07/2004
Mas como ficaria este código no OnExite, por favor
GOSTEI 0
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.
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
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.
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
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.
Simples assim, VLWs FLWs.
GOSTEI 0
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:
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
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:
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
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 e essa função te dar um Result de True/False.
Complementando, no seu salvar você vai fazer:
Vejam aí, qualquer coisa retorno com a função mais detalhada.
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
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
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:
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