Fórum Não grvar nomes duplicados no banco #277968

19/04/2005

0

Olá, pessoal!!!

Estou querendo fazer o seguinte controle em minha aplicação. Tenho um cadastro aqui que são cadastrados pessoas com os seus respectivos dados (Nome, Nome da Mãe, Nome do Pai, Dt de Nascimento, etc). Quero fazer o seguinte controle. Na hora que eu for clicar no botão Gravar, Quero testar se ja existe essa pessoa cadastrada no banco. Se existir, quero verificar o nome da Mãe da pessoa. Assim creio eu que não serão gravados pessoas repetidas no banco.
Exemplo:
MARIA DA SILVA //Se tiver outra MARIA DA SILVA, que não é difícil de acontecer, comparo nome da mãe dela.

OBS: O nome da pessoa e da mãe, são obrigatórios.

Estou usando SQL Server e ADO.

Se alguém ja tiver feito algo parecido ou se puder me da alguma dica de como posso fazer esse controle, agradeço muito.

Cristiano Mário


Cristianojedi

Cristianojedi

Responder

Posts

19/04/2005

Adriano_servitec

Ola amigo, dessa forma tambem queria saber, mais nos meus programas uso fazer essa pesquisa pelo numero do CPF. para testar se ja foi cadastrado.


Responder

Gostei + 0

19/04/2005

Edilcimar

use uma locate utilizando a busca pelos dois campos


Responder

Gostei + 0

19/04/2005

Cristianojedi

Mais existem pessoas que são cadastradas na minha aplicação que não tem CPF, são menores de idade e tal. Preciso testar o Nome da pessoa e o nome da mãe dela.

Obrigado!!!

Cristiano Mário


Responder

Gostei + 0

19/04/2005

Andremuller

Não sei se teria tempo pra montar todo o exemplo de resposta mas não usa locate porque é muito lerdo e obviamente você não deve ter carregado todos os clientes porque isso seria desnecessário.
Como é SQLServer cria uma stored procedure que verificasse isso pra ti batendo direto o nome da pessoa e da mãe. Se trouxer alguém então tá repetido porque como tu quer verificar isso antes da gravação os dados atuais ainda não foram inseridos.

Também daria pra fazer algo como criar uma trigger que verificasse isso pra ti, porque na trigger tem como pegar os dados recém inseridos, e depois criasse uma excessão, mas por stored procedure também vai ficar bom.


Responder

Gostei + 0

19/04/2005

Cristianojedi

Ok, andremuller!!! :D

Muito obrigado.

Cristiano Mário


Responder

Gostei + 0

19/04/2005

Mysys

QRY.Close;
QRY.Sql.Clear;
QRY.Sql.Add(´SELECT NOMCLI,NOMMAE FROM TBLCli´);
QRY.Sql.Add(´WHERE NOMCLI = :VSNomCli´);
QRY.Sql.Add(´AND NOMMAE = :VSNomMae´);
QRY.Params[0].AsString := passa o nome;
QRY.Params[1].AsString := passa o nome da mae
QRY.Open;

If not QRY.IsEmpty Then
begin
ShowMessage(´cliente Repetido´)
Exit;
end;
Else
Grava seu Cadastro


mas eu ainda acho que voce deveria fazer a mesma consulta mas somente do CPF


Responder

Gostei + 0

19/04/2005

Mysys

tipo vamos dizer que voce tem um bota chamado gravar antes do post voce coloca isso ai


Responder

Gostei + 0

19/04/2005

Cristianojedi

Boa MySYS!!!

Valeu...

Cristiano Mário


Responder

Gostei + 0

20/04/2005

Andremuller

Sem querer prolongar essa discussão, montei o exemplo pra ti.
Como eu disse use uma stored procedure porque fica muito mais rápido.

Exemplo:
Criei uma tabela com os campos
Codigo int
Nome varchar(50)
NomeMae varchar(50)

Depois crie a stored procedure
CREATE procedure spr_CheckName
  @Nome varchar(50),
  @NomeMae varchar(50)

as

declare @Codigo integer
 
select @Codigo = Codigo from Nomes 
where Nome = @Nome and NomeMae = @NomeMae

return(@Codigo)

GO


o disparo dela pode ser via código ou via trigger. Se for via código:
  SQLStoredProc1.Close;
  SQLStoredProc1.ParamByName(´Nome´).Value := edit1.Text;
  SQLStoredProc1.ParamByName(´NomeMae´).Value := edit2.Text;
  SQLStoredProc1.ExecProc;
  if SQLStoredProc1.Params[0].AsInteger > 0 then
    raise Exception.Create(´Já existe.´);


Não tem com fazer rotina mais rápida.


Responder

Gostei + 0

20/04/2005

Cristianojedi

Mais uma vez muito obrigado andremuller!!!

Abraço!

Cristiano Mário


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar