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


    [Resolvido]editar campo de chave-primária

    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]editar campo de chave-primária Empty [Resolvido]editar campo de chave-primária

    Mensagem  mathusalmeida 28/8/2013, 01:32

    olá a todos do fórum

    Tenho uma tabela de cadastro de clientes com 4000 cadastros realizados.

    O campo, que é a chave primária na tabela com tipo de dados numeração automática, iniciado em 1.

    Problema:

    Gostaria de, de alguma maneira, via vba, ou uma consulta atualização(?!) alterar todos os registros do campo da seguinte maneira:

    registro de n° 1
    alterar para: 201308270001. onde:
    2013 - ano atual;
    08 - mês atual;
    27 - dia atual;
    0001 - sequência numérica.

    Os próximos cadastros seguiram este sequência via código vba.
    201308270002;
    201308270003.

    Se me fiz entender, alguma sugestão?

    No aguardo.

    Matusalém Almeida.
    avatar
    Convidado
    Convidado


    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  Convidado 28/8/2013, 02:15

    Boas Amigão... em campos de numeração automática(chave primária) não é possível a edição
    Tens que criar um novo campo do tipo texto e realizar a numeração dos registros via VBA.


    Cumprimentos.
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  mathusalmeida 28/8/2013, 10:15

    Olá Piloto

    Sabemos que os campos numeração automática vai incrementando +1 ao último valor do registro. O chato disto é que quer os dados sejam gravados ou não (por exemplo quando estamos testando a aplicação) o contador continua rodando. Se deletarmos ou cancelar algum registro, não é possível, da forma normal, reutilizar aquele nº.

    Então, digamos que eu tenha 100 registro em minha tabela, dificilmente os registro estarão enumerados de 1 - 100. Ok.

    Eu até consegui reorganizar os números. Tenho uma tabela com 4000 clientes e os números dos registros eram muito variados de 1 até + de 5000. Então pesquisando vi neste link http://support.microsoft.com/kb/812718/pt-br que era possível redefinir um valor de campo AutoNumeração no Access[/color][/color]. Segui as orientações e realmente os números dos registros ficaram direitinhos de 1 - 4000.

    Tô entendo sua orientação. Mas como posso, após inserir um campo tipo texto na tabela, executar via vba este código do nosso mestre JPalo:

    Código:
    numeroencontrado = Nz(DMax("RegistroNum", "tbl_Cliente"), 0)
        If IsNull(numeroencontrado) Or numeroencontrado = "" Or numeroencontrado = "0" Then
        'se não existir numeração, insere o 001 para iniciar
            numeroencontrado = Format(Date, "yyyy") & Format(Date, "mm") & Format(Date, "dd") & "0001"
        'devolve ao campo a nova numeração
            Me.Titulo.Value = numeroencontrado
        Else
        'se já existir numeração na tabela, acrescenta +1
            proximoNumero = Right(DMax("RegistroNum", "tbl_Cliente"), 4) + 1
        'devolve ao campo a nova numeração
            Me.Titulo.Value = Format(Date, "yyyy") & Format(Date, "mm") & Format(Date, "dd") & Format(proximoNumero, "0000")
      End If
      'vai para novo registro
      DoCmd.GoToRecord , , acNewRec
    Pelo código acima o primeiro registro ficaria assim: 201308280001 (ano, mês, dia e sequência numérica) os próximos assim: 201308280002;201308280003;201308280004...;201308284000.

    É possível rodar isto no click de um botão, alterando todos de uma vez, ou terei que passar registro por registro em um form e ir fazendo o update na tabela?

    Uma luz?!

    avatar
    Convidado
    Convidado


    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  Convidado 28/8/2013, 15:29

    Justamente por ter este problema de queimar uma numeração em caso de testes ou deleção de algum registro prefiro utilizar código para numeração sequencial.
    >> O ruim de organizar a numeração automática como citou acima e é justamente modificar o número de um cliente ou pronturário (caso o seja)
    assim sempre irá modificar os números subsequentes.

    No Fórum temos códigos que numeram registros e caso algum seja excluído preenche o novo registro com o número vago.

    é possível sim numerar todos sequencialmente... Coloque em sequencia como gostaria de que ficasse esta numeração para que vejamos isto pra ti.


    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  Convidado 28/8/2013, 15:33

    Veja este excelente código do Mestre Alexandre Neves que numera sequencialmente um campo número e ocupa lacunas na tabela:


    Function NumeroLivreVago(CampoID As String, NomeTabela As String) As Long
    'criada por Alexandre Neves
    'em 2011-06-15
    'para Harysohn
    'do fórum MaximoAccess
    Dim rst As DAO.Recordset, i As Integer
    Set rst = CurrentDb.OpenRecordset("SELECT " & CampoID & " FROM " & NomeTabela & "  WHERE Not IsNull(ID) ORDER BY ID;")

    If rst.RecordCount = 0 Or IsNull(rst(0)) Then
    NumeroLivreVago = 1
    Else
    i = 1
    Do
    If rst.EOF Then
    NumeroLivreVago = i
    Exit Do
    ElseIf IsNull(rst(0)) Or rst(0) = "" Or rst(0) <> i Then
    NumeroLivreVago = i
    Exit Do
    End If
    i = i + 1
    rst.MoveNext
    Loop
    End If
    Set rst = Nothing
    Exit Function
    MostraErro:
    MsgBox err.Number & vbCr & err.Description
    End Function



    Cumprimentos.
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  mathusalmeida 28/8/2013, 16:11

    Em relação ao código do mestre Alexandre Neves que vc apresentou, não tentei ainda, mas diga aí Piloto, dá pra fazer o seguinte:

    NovoCodigoCliente
    201308280001
    201308280002
    201308280003
    201308280004
    :
    :
    :
    :
    201308284000

    É possivel?

    Obrigado desde já!
    avatar
    Convidado
    Convidado


    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  Convidado 28/8/2013, 16:38

    Com uma boa observação será possível.. Creio que devamos ter dois campos..

    1 - Tipo número >> Aqui ficarão a numeração sequencial 1.2.3.4 etc..
    2 - Tipo Texto  >>  Aqui através do código será numerado o campo 1, e ao numerar incrementar o campo 2 concatenado como deseja.


    Cumprimentos.
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  mathusalmeida 28/8/2013, 19:26

    Tentarei e darei retorno.

    Até mais.


    Última edição por PILOTO em 31/10/2013, 19:19, editado 1 vez(es) (Motivo da edição : Tópico dado como resolvido por falta de resposta)

    Conteúdo patrocinado


    [Resolvido]editar campo de chave-primária Empty Re: [Resolvido]editar campo de chave-primária

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 7/11/2024, 22:08