Fórum Não grvar nomes duplicados no banco #277968
19/04/2005
0
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
Curtir tópico
+ 0Posts
19/04/2005
Adriano_servitec
Gostei + 0
19/04/2005
Edilcimar
Gostei + 0
19/04/2005
Cristianojedi
Obrigado!!!
Cristiano Mário
Gostei + 0
19/04/2005
Andremuller
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
19/04/2005
Cristianojedi
Muito obrigado.
Cristiano Mário
Gostei + 0
19/04/2005
Mysys
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
19/04/2005
Mysys
Gostei + 0
19/04/2005
Cristianojedi
Valeu...
Cristiano Mário
Gostei + 0
20/04/2005
Andremuller
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
20/04/2005
Cristianojedi
Abraço!
Cristiano Mário
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)