MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


3 participantes

    Duplicação em numeração automática com digito verificador

    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 12/8/2013, 15:04

    Amigos e mestres,

    Com ajuda aqui do site consegui criar um módulo que gera a numeração automatica com digito verificador, porém, ao implementar no sistema mesmo com o campo da tabela nao permitindo duplicidade, as vezes, o sistema emite um aviso informando que nao pode salvar dados pois esta com dado duplicado.

    Abaixo segue o código, se alguem puder me ajudar agradeço!

    Option Compare Database

    Public comando As String
    Public banco As Database
    Public dataset As Recordset

    Function conecta()
    Set banco = CurrentDb
    End Function

    Function valida_selecao()
    Set dataset = banco.OpenRecordset(comando, dbOpenDynaset)
    End Function


    Public Function Contador(strCampo As String, ACP As String) As Variant

    Dim letra As String, strNumero As String
    Dim numero As Integer, I As Integer
    Dim COD As String, COD0 As String
    Dim COD1 As Integer, COD2 As Integer
    Dim COD3 As String, COD4 As String
    Dim F1 As Integer, F2 As Integer
    Dim F3 As Integer, F4 As Integer
    Dim Soma1 As Integer, Soma2 As Integer
    Dim Soma As Integer, Digito As Integer
    Dim NumeroACP As String
    Dim strSQL As String, rkt As DAO.Recordset

    'For I = 65 To 90
    ' letra = Chr(I)
    'Next

    I = Int((90 - 65 + 1) * Rnd + 65)

    letra = Chr(I)

    numero = Int((9999 - 1 + 1) * Rnd + 1)

    strNumero = Format(numero, "0000")

    COD = letra + strNumero

    'Separa a variável COD em partes
    COD0 = (I - 65)
    COD1 = (Left$(COD0, 1))
    COD2 = (Right$(COD0, 1)) * 2

    Soma1 = COD1 + (Left$(COD2, 1)) + (Right$(COD2, 1))

    F1 = Val(Mid(numero, 1, 1))
    F2 = Val(Mid(numero, 2, 1)) * 2
    F3 = Val(Mid(numero, 3, 1))
    F4 = Val(Mid(numero, 4, 1)) * 2

    COD3 = Format(F2, "00")
    COD4 = Format(F4, "00")

    Soma2 = F1 + Left(COD3, 1) + Right(COD3, 1) + F3 + Left(COD4, 1) + Right(COD4, 1)

    Soma = Soma1 + Soma2

    'Gera o dígito verificador
    Digito = 10 - (Soma Mod 10)
    If Digito = 10 Then Digito = 0

    'Cria o número da ACP
    NumeroACP = COD + Trim$(Str$(Digito))

    If DCount("Codigo", "ACP", Codigo = NumeroACP) = 0 Then
    Contador = NumeroACP
    Else
    Contador = Null
    End If


    strSQL = "SELECT DISTINCT Max" & "(" & strCampo & ")" & " As MaxValor"
    strSQL = strSQL & " FROM " & ACP
    Set rkt = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardOnly)

    ' Contador = NumeroACP
    rkt.Close: Set rkt = Nothing

    End Function
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 13/8/2013, 19:20

    Alguem consegue me ajudar????
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  Alexandre Neves 13/8/2013, 19:33

    Boa tarde,
    A mensagem sendo do sistema, é confiável e terá dados duplicados
    Verifique se não tem outro campo com impedimento de duplicação e seja nesse campo que aparece a mensagem
    Não posso verificar o funcionamento do código, no entanto, onde obtém a numeração, coloque código para verificar se essa numeração ainda não existe na tabela. Se existir, cria novo código


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 13/8/2013, 20:20

    Alexandre, que existe um código duplicado eu consigo identificar!

    E na tabela não há outro campo que nao permita duplicação, apenas este.

    O que preciso é saber como fazer neste código pra que a numeração automatica não se repita.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  Alexandre Neves 13/8/2013, 21:16

    Em que linha obtém o contador? Não vi


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 14/8/2013, 15:49

    If DCount("Codigo", "ACP", Codigo = NumeroACP) = 0 Then
    Contador = NumeroACP
    Else
    Contador = Null
    End If
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 14/8/2013, 17:50

    Alguem consegue me ajudar, ja fiz outras tentativas e não estou realmente conseguindo!
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  Alexandre Neves 14/8/2013, 19:49

    Boa tarde,
    O código deveria ser
    If DCount("Codigo", "ACP", Codigo =" & NumeroACP) = 0 Then
    Contador = NumeroACP
    Else
    Contador = Null '<---porque o contador ficará nulo se o contador já existir na tabela? será quando fica nulo que indica repetição?
    End If

    Não vejo necessidade das linhas de código abaixo:
    strSQL = "SELECT DISTINCT Max" & "(" & strCampo & ")" & " As MaxValor"
    strSQL = strSQL & " FROM " & ACP
    Set rkt = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardOnly)

    ' Contador = NumeroACP
    rkt.Close: Set rkt = Nothing


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 14/8/2013, 20:29

    Alexandre,

    Este campo nao pode ficar nulo, precisa existir um valor. Nesse caso quando for repetição ele deveria inserir um novo Contador.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  Alexandre Neves 14/8/2013, 20:51

    Pois, mas já reparou que permite nulo?

    Veja se funciona assim:
    Public Function Contador(strCampo As String, ACP As String) As Variant

    Dim letra As String, strNumero As String
    Dim numero As Integer, I As Integer
    Dim COD As String, COD0 As String
    Dim COD1 As Integer, COD2 As Integer
    Dim COD3 As String, COD4 As String
    Dim F1 As Integer, F2 As Integer
    Dim F3 As Integer, F4 As Integer
    Dim Soma1 As Integer, Soma2 As Integer
    Dim Soma As Integer, Digito As Integer
    Dim NumeroACP As String
    Dim strSQL As String, rkt As DAO.Recordset

    'For I = 65 To 90
    ' letra = Chr(I)
    'Next
    GeraContador:
    I = Int((90 - 65 + 1) * Rnd + 65)

    letra = Chr(I)

    numero = Int((9999 - 1 + 1) * Rnd + 1)

    strNumero = Format(numero, "0000")

    COD = letra + strNumero

    'Separa a variável COD em partes
    COD0 = (I - 65)
    COD1 = (Left$(COD0, 1))
    COD2 = (Right$(COD0, 1)) * 2

    Soma1 = COD1 + (Left$(COD2, 1)) + (Right$(COD2, 1))

    F1 = Val(Mid(numero, 1, 1))
    F2 = Val(Mid(numero, 2, 1)) * 2
    F3 = Val(Mid(numero, 3, 1))
    F4 = Val(Mid(numero, 4, 1)) * 2

    COD3 = Format(F2, "00")
    COD4 = Format(F4, "00")

    Soma2 = F1 + Left(COD3, 1) + Right(COD3, 1) + F3 + Left(COD4, 1) + Right(COD4, 1)

    Soma = Soma1 + Soma2

    'Gera o dígito verificador
    Digito = 10 - (Soma Mod 10)
    If Digito = 10 Then Digito = 0

    'Cria o número da ACP
    NumeroACP = COD + Trim$(Str$(Digito))

    If DCount("Codigo", "ACP", Codigo = NumeroACP) = 0 Then
    Contador = NumeroACP
    Else
    goto GeraContador
    End If
    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 14/8/2013, 21:08

    Com o GoTo não funciona!
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 16/8/2013, 20:25

    Alguem mais consegue me ajudar ou me dar outra idéia???
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  Alexandre Neves 16/8/2013, 21:10

    Disponibilize dados para se avaliar


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 19/8/2013, 11:27

    Segue o sistema para testes.
    O campo fica no formulário ACP e o módulo se chama ModACP.
    Anexos
    Duplicação em numeração automática com digito verificador AttachmentSistema Locacoes - TESTE.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (315 Kb) Baixado 9 vez(es)
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  JPaulo 19/8/2013, 12:17

    Um pitaco;

    Na tabela ACP, Campo Codigo, coloque Indexado=Não

    Porque no seu modulo, ele já valida se existe com o DCount(, ae não necessita de estar indexado e assim deixará de dar a mensagem de duplicidade.

    Fiz o teste com a alteração do Alexandre e funcionou com nota 10.



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Duplicação em numeração automática com digito verificador Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Duplicação em numeração automática com digito verificador Folder_announce_new 102 Códigos VBA Gratuitos...
    Duplicação em numeração automática com digito verificador Folder_announce_new Instruções SQL como utilizar...
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 21/8/2013, 11:03

    João Paulo, bom dia!

    De fato a mensagem desaparece, mas permite que o codigo se repita.

    E não posso ter duplicidade deste código na tabela ACP.
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  JPaulo 21/8/2013, 15:02

    O código não se pode repetir, a menos que este trecho If DCount("Codigo", "ACP", Codigo = NumeroACP) = 0 Then
    não esteja a funcionar.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Duplicação em numeração automática com digito verificador Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Duplicação em numeração automática com digito verificador Folder_announce_new 102 Códigos VBA Gratuitos...
    Duplicação em numeração automática com digito verificador Folder_announce_new Instruções SQL como utilizar...
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 29/8/2013, 21:08

    Amigos, já fiz e refiz varios testes!
    Enquanto estou com o sitema aberto funciona maravilhosamente, mas quando eu fecho e reabo o sistema ele gera um "Codigo" que já existe.
    E Joao Paulo, sem a indexação de Duplicidade não autorizada o sitema permite utilizar o mesmo numero!
    Alguem consegue entender o porque isto acontece?
    avatar
    amelioneto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/04/2013

    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  amelioneto 3/9/2013, 22:09

    Sei que estou sendo insistente mas o problema continua!
    Alguem consegue ajudar?

    Conteúdo patrocinado


    Duplicação em numeração automática com digito verificador Empty Re: Duplicação em numeração automática com digito verificador

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 17:13