Não grvar nomes duplicados no banco

Delphi

19/04/2005

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

Curtidas 0

Respostas

Adriano_servitec

Adriano_servitec

19/04/2005

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.


GOSTEI 0
Edilcimar

Edilcimar

19/04/2005

use uma locate utilizando a busca pelos dois campos


GOSTEI 0
Cristianojedi

Cristianojedi

19/04/2005

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


GOSTEI 0
Andremuller

Andremuller

19/04/2005

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.


GOSTEI 0
Cristianojedi

Cristianojedi

19/04/2005

Ok, andremuller!!! :D

Muito obrigado.

Cristiano Mário


GOSTEI 0
Mysys

Mysys

19/04/2005

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


GOSTEI 0
Mysys

Mysys

19/04/2005

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


GOSTEI 0
Cristianojedi

Cristianojedi

19/04/2005

Boa MySYS!!!

Valeu...

Cristiano Mário


GOSTEI 0
Andremuller

Andremuller

19/04/2005

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.


GOSTEI 0
Cristianojedi

Cristianojedi

19/04/2005

Mais uma vez muito obrigado andremuller!!!

Abraço!

Cristiano Mário


GOSTEI 0
POSTAR