4 participantes
[Resolvido]comando ou formula para evitar repetição de nomes
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº1
comando ou formula para evitar repetição de nomes
qual seria uma formula ou comando para tabela ou frm ,para não haver repetição ao digitar um nome no frm cadastro de clientes,pois tenho um frm onde ao incluir nomes iguais ele simplesmente aceita o que devo faze ?obrigado
criquio- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 11229
Registrado : 30/12/2009
Tem certeza que não terá nomes iguais? E se aparecer dois clientes com mesmo nome? E não é assim tão raro. Para você ter uma ideia, tem um primo que tem um xará que mora na mesma cidade dele e tem nome e sobrenome exatamente iguais. Um tio meu tambem já encontrou dois com nome e sobrenome iguais aos dele. Não seria melhor avaliar o CPF por exemplo?
OBS.: Você criou dois tópicos sobre a mesma dúvida. O outro foi excluído.
OBS.: Você criou dois tópicos sobre a mesma dúvida. O outro foi excluído.
.................................................................................
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
Avelino Sampaio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3900
Registrado : 04/04/2010
Bom, muitos casos não se tem o CPF e nem o CNPJ. E outras vezes é um pré-cadastro, aonde se pega o mínimo do cliente.
Veja se este meu artigo ajuda.
http://www.usandoaccess.com.br/dicas/dica29.asp?id=1#inicio
Bom estudo!
Veja se este meu artigo ajuda.
http://www.usandoaccess.com.br/dicas/dica29.asp?id=1#inicio
Bom estudo!
.................................................................................
Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces
Clique AQUI e analise o custo beneficio do material oferecido.
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº4
cadastro de clientes
Então veja !!!!é que eu tenho um salão pequeno ,e não queria pedir o cpf dos clientes ,em caso de nomes iguais eu colocaria fulano 1 e fulano 2 entende? ou outra característica , por isso minha insistencia no campo nome teria outra opção ?obrtigado
criquio- Moderador Global
- Respeito às regras :
Sexo :
Localização :
Mensagens : 11229
Registrado : 30/12/2009
Bem, quando o cliente é jurídico, fica mais fácil porque duas empresas não podem ter a mesma razão social, mas no caso de pessoa física, aí fica complicado não permitir duplicidade de nomes. Para o seu caso, talvez, fosse uma boa colocar um apelido, ou caso tenha o endereço do cliente, usar ele para fazer a diferenciação. Se a intenção é não permitir que uma mesma pessoa seja cadastrada mais de uma vez, acredito que seja por aí.
.................................................................................
Meu novo site: www.vcssistemas.com.br Clique aqui e veja um vídeo que explica como fazer pesquisas no forum. DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo: 1 - faça uma cópia do aplicativo 2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar 3 - use o Compactar/Reparar 4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem) Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário. Positive as mensagens que achar útil, no canto superior direito delas. |
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº6
cadastro de clientes
Ótimo ,mas o que devo fazer ,entaum ?desculpe!!!
Silvio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 5120
Registrado : 20/04/2011
Olá, boa tarde.
Os mestres já te responderam. Todo bom cadastro, tem o CPF..o RG....O CNPJ etc...etc..
Como você não deseja pedir documentos pessoais, uma saída, não muito lógica seria incluir na tbl o campo " apelido " ou algo que distingue tua clientela, pegando cada particularidade e incluindo em teu projeto para evitar registros duplos do mesmo cliente.
Existe em nosso repositório de exemplos, comandos em vba que fazem comparações de nomes evitando registro em duplicata.
Os mestres já te responderam. Todo bom cadastro, tem o CPF..o RG....O CNPJ etc...etc..
Como você não deseja pedir documentos pessoais, uma saída, não muito lógica seria incluir na tbl o campo " apelido " ou algo que distingue tua clientela, pegando cada particularidade e incluindo em teu projeto para evitar registros duplos do mesmo cliente.
Existe em nosso repositório de exemplos, comandos em vba que fazem comparações de nomes evitando registro em duplicata.
.................................................................................
Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
www.maximoaccess.com/t860-resolucao-de-topicos
"Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."
Convidad- Convidado
Neste caso, pode usar o código abaixo para checar se o cliente já está cadastrado:
Private Sub NomeCliente_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookup("[NomeCliente]", "tabClientes", "[NomeCliente] ='" & Me!NomeCliente & "'")) Then
Cancel = True
NomeCliente.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Silvio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 5120
Registrado : 20/04/2011
Eita.....
Boa tarde Criquio.
Respondemos quase ao mesmo tempo....vale a tua resposta.
Boa tarde Criquio.
Respondemos quase ao mesmo tempo....vale a tua resposta.
.................................................................................
Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
www.maximoaccess.com/t860-resolucao-de-topicos
"Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº10
cadastro
Onde devo incluir esse codigo?
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº11
cadastro de cliente
essa formula eu devo trocar alguns nome ,ou simplesmente ou simplesmente colar sem mudar nenhum nomne ?
Convidad- Convidado
Se vale a opção, então coloque no evento Antes de Atualizar do campo NomeCliente.
Precisa substituir o Nome tabClientes pelo nome da sua tabela e o Nome NomeCliente pelo nome do seu campo que identifica o cliente.
Avelino Sampaio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3900
Registrado : 04/04/2010
Olá Norberto
Vc sabia que o seu código tem uma pegadinha???
Vamos supor que vc tenha verificado que um nome começou com letra minúscula ao inves de maiúscula. Tente corrigir então a letra e veja o que vai acontecer.
Para evitar este problema, no meu artigo eu dou uma solução utilizando uma variável, mas esta semana eu decobri uma solução bem mais simples utilizando a propriedade OLDVALUE que possui o valor antes da mudança.
Private Sub NomeCliente_BeforeUpdate(Cancel As Integer)
if Me!NomeCliente = Me!NomeCliente.oldvalue then exit sub
If Not IsNull(DLookup("[NomeCliente]", "tabClientes", "[NomeCliente] ='" & Me!NomeCliente & "'")) Then
Cancel = True
NomeCliente.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Sucesso!
Vc sabia que o seu código tem uma pegadinha???
Vamos supor que vc tenha verificado que um nome começou com letra minúscula ao inves de maiúscula. Tente corrigir então a letra e veja o que vai acontecer.
Para evitar este problema, no meu artigo eu dou uma solução utilizando uma variável, mas esta semana eu decobri uma solução bem mais simples utilizando a propriedade OLDVALUE que possui o valor antes da mudança.
Private Sub NomeCliente_BeforeUpdate(Cancel As Integer)
if Me!NomeCliente = Me!NomeCliente.oldvalue then exit sub
If Not IsNull(DLookup("[NomeCliente]", "tabClientes", "[NomeCliente] ='" & Me!NomeCliente & "'")) Then
Cancel = True
NomeCliente.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Sucesso!
.................................................................................
Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces
Clique AQUI e analise o custo beneficio do material oferecido.
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº14
comando ou formula para evitar repetição de nomes
Eu coloquei a formula anterior e o frm,não aceitou nenhum nome ,vou tentar a ultima!!!
Convidad- Convidado
Eu uso assim, não sei porque omite o detalhe.
E uso regras de validação que garantem a "sintaxe" do nome.
Valeu, Avelino!
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº16
comando ou formula para evitar repetição de nomes
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Me!form_nome = Me!form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Eu usei o comando acima e qq nome que eu coloco no campo nome,me da uma mensagem de cliente ja cadastrado,mesmo cliente não cadastrado o que eu deveria mudar .?qq nome o acces fala "cliente ja cadastrado ,o que fazer?
Eu colei no evento"antes de aualizar",está correto?obrigado
If Me!form_nome = Me!form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Eu usei o comando acima e qq nome que eu coloco no campo nome,me da uma mensagem de cliente ja cadastrado,mesmo cliente não cadastrado o que eu deveria mudar .?qq nome o acces fala "cliente ja cadastrado ,o que fazer?
Eu colei no evento"antes de aualizar",está correto?obrigado
Última edição por kadhu em 5/5/2012, 15:22, editado 1 vez(es)
Convidad- Convidado
Parece estar correto.
Ficou difícil.
Silvio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 5120
Registrado : 20/04/2011
Boa tarde...apenas um pitaco....
Eu colei no evento"antes de aualizar",está correto?obrigado
tem que ser no após atualizar.
fui...bom fim de semana para todos.
Eu colei no evento"antes de aualizar",está correto?obrigado
tem que ser no após atualizar.
fui...bom fim de semana para todos.
.................................................................................
Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
www.maximoaccess.com/t860-resolucao-de-topicos
"Quase tudo é possível quando se tem determinação e força de vontade. Não desista tão rápido."
Convidad- Convidado
Opa! amigo Silvio.
Após Atualizar já foi... Cancel = True não se aplica mais.
A ideia é impedir a atualização se o nome já existir, pois depois, pra reverter, fica mais complicado.
Bom fim de semana pra ti.
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº20
comando ou formula para evitar repetição de nomes
Mas antes vc havia falado que era antes de atualizar ????????o comando é esse pq não funciona aqui ?
esse codigo esta no evento antes de atualizar
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
esse codigo esta no evento antes de atualizar
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Convidad- Convidado
Foi o que eu disse para o amigo Silvio:
É melhor usar o evento BeforeUpdate (Antes de Atualizar).
Não sei porque não está funcionado. Deveria permitir o cadastro quanto não constar na tabela.
Tente descobrir porque o Access está considerando o valor como já existente.
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
Será que eu preciso colocar aspas simples no inicio das frases,pois se codigos está correto pq não funciona?
'Private Sub form_nome_BeforeUpdate(Cancel As Integer)
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Me!form_nome = Me!form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
'Private Sub form_nome_BeforeUpdate(Cancel As Integer)
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Me!form_nome = Me!form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Avelino Sampaio- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3900
Registrado : 04/04/2010
Olá
Use o msgbox e nos diga qual é a mensagem?
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
msgbox DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")
cancel=true
form_nome.Undo
End Sub
Use o msgbox e nos diga qual é a mensagem?
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
msgbox DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")
cancel=true
form_nome.Undo
End Sub
.................................................................................
Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces
Clique AQUI e analise o custo beneficio do material oferecido.
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº24
comando ou formula para evitar repetição de nomes
Agora aparece o nome do cliente que eu digitei
seria assim
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Me!form_nome = Me!form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")
End If
End Sub
seria assim
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Me!form_nome = Me!form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")) Then
Cancel = True
form_nome.Undo
MsgBox DLookup("[form_nome]", "Tab_Clientes", "[form_nome] ='" & Me!form_nome & "'")
End If
End Sub
Convidad- Convidado
O código do Avelino é para fazer um teste:
Deve ser inserido em substituição ao anterior.
Então, se o nome do cliente que você digitou aparecer na caixa de mensagem é porque já existe na tabela.
Continuamos na mesma.
Na minha opinião, só vendo o aplicativo.
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº26
comando ou formula para evitar repetição de nomes
posso enviar o aplicativo?
Convidad- Convidado
Certamente.
No meu caso precisa ser nA versão 2003.
Convidad- Convidado
No formulário o nome do campo chama-se "form_nome", mas na tabela o nome do campo é "nome".
O código estava supondo que os nomes fossem iguais, tanto no form como na tabela.
Atente para o que pedimos que o código faça usando a função DLookup:
"Pesquise na tabela Tab_Clientes e verifique se existe no campo nome um texto igual ao que foi digitado no campo form_nome."
Usamos a função IsNull para verificar se a função DLookup achou alguma coincidência, e se achou, mandamos cancelar a digitação no campo:
"Se não for Nulo o retorno da pesquisa, cancele o que foi digitado"
É fundamental que todos os nomes estejam corretos!
Eis o código, testado e funcionando:
Option Compare Database
Option Explicit
Private Sub form_nome_BeforeUpdate(Cancel As Integer)
If Me.form_nome = Me.form_nome.OldValue Then Exit Sub
If Not IsNull(DLookup("[nome]", "Tab_Clientes", "[nome] ='" & Me!form_nome & "'")) Then
Cancel = True
Me.form_nome.Undo
MsgBox "Cliente já cadastrado."
End If
End Sub
Convidad- Convidado
E então, resolveu ?
- Anexos
- Sistema-2003.zip
- (66 Kb) Baixado 54 vez(es)
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº30
comando ou formula para evitar repetição de nomes
Obrigado,resolvido !!!!!!
vixi agora pintou uma nova idéia !!!!
Por exempo estou no frm livro caixa lançando um cliente e digito um nome que não existe no cadastro de clientes,queria uma função para ao clicar nessa mensdagem de clinte não cadastrado,essa janela pergunte se eu quero abrir o frm de cliente e cadastrar esse novo cliente ,ou simplesmente clicar nesse botão de alerta e automaticamente abrir o frm de clientes.obrigado
vixi agora pintou uma nova idéia !!!!
Por exempo estou no frm livro caixa lançando um cliente e digito um nome que não existe no cadastro de clientes,queria uma função para ao clicar nessa mensdagem de clinte não cadastrado,essa janela pergunte se eu quero abrir o frm de cliente e cadastrar esse novo cliente ,ou simplesmente clicar nesse botão de alerta e automaticamente abrir o frm de clientes.obrigado
Convidad- Convidado
Este código cadastra automaticamente o cliente se não existir na lista.
Mas se quiser abrir o formulário de clientes faço outro código.
Estou supondo que o form livro caixa é o Formulario_Tab_LC do arquivo que vc enviou.
O código abaixo é inserido no evento Se não estiver na lista do campo Combinação53:
- Código:
Private Sub Combinação53_NotInList(NewData As String, Response As Integer)
If MsgBox("Deseja adicionar " & NewData & " ao cadastro de Clientes?", vbQuestion + vbYesNo, "Confirmação") = vbYes Then
Dim db As Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Tab_Clientes")
rs.AddNew
rs!Nome = NewData
rs.Update
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
Response = acDataErrAdded
Else
Response = acDataErrContinue
Me.Combinação53.Undo
End If
End Sub
Convidad- Convidado
Olá Pessoal
Sei que os senhores estão adiantados na solução do problema do nosso amigo.
Já trabalhei como homônimos, e digo que tive que repensar a situação, pois sempre vai ter um dito que irá digitar o nome errado, criando mais de 1 registro para um mesmo cliente.
Minha sugestão:
Usar o telefone + nomedoCliente(indice duplo), assim nosso amigo, não precisará obter as informações como cpf, etc.
Um disk Pizza , usa o telefone .
Abraços
Sei que os senhores estão adiantados na solução do problema do nosso amigo.
Já trabalhei como homônimos, e digo que tive que repensar a situação, pois sempre vai ter um dito que irá digitar o nome errado, criando mais de 1 registro para um mesmo cliente.
Minha sugestão:
Usar o telefone + nomedoCliente(indice duplo), assim nosso amigo, não precisará obter as informações como cpf, etc.
Um disk Pizza , usa o telefone .
Abraços
Convidad- Convidado
Ricardo
Aqui está um exemplo de como evitar erros com homônimos (nomes iguais).
Esse exemplo usa o telefone como campo de pesquisa.
No caso de um salão onde mãe e filha são suas clientes e usam o mesmo telefone, veja como foi resolvido.
Abraços
Aqui está um exemplo de como evitar erros com homônimos (nomes iguais).
Esse exemplo usa o telefone como campo de pesquisa.
No caso de um salão onde mãe e filha são suas clientes e usam o mesmo telefone, veja como foi resolvido.
Abraços
kadhu- Super Avançado
- Respeito às regras :
Sexo :
Localização :
Mensagens : 734
Registrado : 25/04/2012
- Mensagem nº34
comando ou formula para evitar repetição de nomes
Obrigado,vou dar uma olhada!!
como eu poderia adaptar esse campo,ou essas formulas dentro do dentro do meu sistema ,vc poderia me ajudar ,e como eu faço para ao fazer lactos no frm livro caixa todos os campo da tab clientes,sejam sincronizados e atualizados automaticamente ?obrigado
como eu poderia adaptar esse campo,ou essas formulas dentro do dentro do meu sistema ,vc poderia me ajudar ,e como eu faço para ao fazer lactos no frm livro caixa todos os campo da tab clientes,sejam sincronizados e atualizados automaticamente ?obrigado
- Anexos
- Sistema-access-2007.zip
- Você não tem permissão para fazer download dos arquivos anexados.
- (189 Kb) Baixado 32 vez(es)
Convidad- Convidado
Como não tivemos retorno, o tópico passa a resolvido.
Se necessário, basta dar continuidade.