Não grvar nomes duplicados no banco
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
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
Curtidas 0
Respostas
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
19/04/2005
use uma locate utilizando a busca pelos dois campos
GOSTEI 0
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
Obrigado!!!
Cristiano Mário
GOSTEI 0
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.
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
19/04/2005
Ok, andremuller!!! :D
Muito obrigado.
Cristiano Mário
Muito obrigado.
Cristiano Mário
GOSTEI 0
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
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
19/04/2005
tipo vamos dizer que voce tem um bota chamado gravar antes do post voce coloca isso ai
GOSTEI 0
Cristianojedi
19/04/2005
Boa MySYS!!!
Valeu...
Cristiano Mário
Valeu...
Cristiano Mário
GOSTEI 0
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
o disparo dela pode ser via código ou via trigger. Se for via código:
Não tem com fazer rotina mais rápida.
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
19/04/2005
Mais uma vez muito obrigado andremuller!!!
Abraço!
Cristiano Mário
Abraço!
Cristiano Mário
GOSTEI 0