MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Criar autonumeração xxxx/n

    Compartilhe

    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Ter 24 Maio 2011, 03:54

    Eu gostaria de criar um número de cadastro personalizado (autonumeração). Seria o seguinte: xxxx/n. Onde xxxx é um ano que eu mesmo vou digitar e n seria um número em ordem crescente que apareceria automaticamente após eu atulizar o campo com o ano (xxxx). Vamos supor que eu já tenha cadastrado seis pacientes com o ano 2006, então apareceria 2006/007; dez pacientes com o ano 2010, então apareceria 2010/011. etc

    Se alguém puder ajudar a desenvolver o código. Obrigado

    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7125
    Registrado : 11/05/2010

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  vieirasoft em Ter 24 Maio 2011, 12:20

    Bom dia amigo

    Procure nos exemplos do repositório, pois tem vários exemplos de contadores com datas. Na autonumeração do Access você só pode formatar com zeros:000000000

    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Qua 25 Maio 2011, 03:24

    Não tem nada nem parecido com oque eu quero no repositório. Obrigado

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Alexandre Neves em Qua 25 Maio 2011, 08:17

    Bom dia, Antony

    Dê-nos elementos: nome da tabela, nome e tipo dos campos envolvidos, etc.
    Cumprimentos,

    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 07:09

    Tentei começar a desenvolver o código mas não consegui, talvez pq a função Dcount seja limitada para o que eu desejo, talvez seja por erro de sintaxe. Inicialmente a função que desenvolvi funciona:

    Me.Private Sub Codigo_AfterUpdate()
    Codigo = DCount("[codigo]", "dadoscomuns", "[codigo] = '" & Codigo & "'")
    End sub

    Mas depois que eu tento utilizar a função left, ela não obedece da maneira que eu preciso:

    Me.Private Sub Codigo_AfterUpdate()
    Me.Codigo = DCount("Left([codigo],4)", "dadoscomuns", "[codigo] = '" & Left(Codigo, 4) & "'")
    End sub

    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 08:51

    Consegui desenvolver a parte crítica do código. Agora so necessito incorporar o ano que digitei no campo código ao número que a função abaixo me retorna. Alguma sujestão?

    Private Sub Codigo_AfterUpdate()
    If Not IsNull(Me.Codigo) Then
    Dim contadorcodigo As Integer

    contadorcodigo = DCount("[codigo]", "dadoscomuns", "Left([codigo],4) = '" & codigo & "'")

    Me.Codigo.Value = contadorcodigo + 1
    End If

    End Sub

    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7125
    Registrado : 11/05/2010

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  vieirasoft em Sab 28 Maio 2011, 11:11

    Adapte ou utilize e bom trabalho tem 2 à sua escolha

    Função Contador no formato número/ano

    Public Function ContadorDeRegistros(strCampo As String, strSql As String)
    'Contador de registros personalizado no formato numero/ano
    Dim strNum As String, DB As Database
    Dim strMax As String, CampoAno As String
    Dim AnoData As String, tbl As Recordset

    Set DB = CurrentDb
    'Ano tirado da data do sistema
    AnoData = Year(Date)

    'Abre a Tabela
    Set tbl = DB.OpenRecordset(strSql)
    'Se não há registros na tabela
    If tbl.RecordCount = 0 Then
    'Primeiro registro
    ContadorDeRegistros = 1 & "/" & AnoData
    Else
    'pega o registro
    strMax = tbl(strCampo)
    'Pega o ano
    CampoAno = Mid(strMax, (InStr(1, strMax, "/")) + 1, 4)
    'Aqui testo o Ano do último registro com o do sistema
    'Se for igual continue a contagem se não...
    If CampoAno = AnoData Then
    strNum = Left(strMax, (InStr(1, strMax, "/") - 1)) + 1
    ContadorDeRegistros = strNum & "/" & AnoData
    Else
    MsgBox "O sistema iniciará uma nova contagem dos registros" _
    & vbCrLf & " em função da virada do ano", vbInformation, "ATENÇÃO"
    ContadorDeRegistros = 1 & "/" & AnoData
    End If
    End If
    'formata o número
    ContadorDeRegistros = StrZero(ContadorDeRegistros, 10)
    tbl.Close
    Set DB = Nothing
    End Function
    ....................................................................................

    Contador no formato número/mês/ano

    Public Function ContarReg(NomeCampo As String, NomeTabela As String)
    'Contador de registros personalizado no formato numero/mes/ano
    Dim DB As Database
    Dim tbl As Recordset, strNum As String
    Dim strMax As String, CampoMes As String
    Dim MesData As String, AnoData As String

    Set DB = CurrentDb
    MesData = Format(Date, "mmm")
    AnoData = Format(Date, "yy")

    Set tbl = DB.OpenRecordset(NomeTabela)

    If tbl.RecordCount = 0 Then
    'Primeiro registro
    ContarReg = 1 & "/" & MesData & "/" & AnoData
    Else
    'pega o registro
    strMax = tbl(NomeCampo)
    'Aqui pego o mês no último registro
    CampoMes = Mid(strMax, (InStr(1, strMax, "/")) + 1, 3)
    'Aqui testo o mês digitado com o último registro
    'Se for igual então
    If CampoMes = MesData Then
    strNum = Left(strMax, (InStr(1, strMax, "/") - 1)) + 1
    ContarReg = strNum & "/" & CampoMes & "/" & AnoData
    Else
    Dim intRes As Integer
    intRes = MsgBox("O sistema iniciará uma nova contagem pela virada do mês." _
    & Chr(10) + Chr(13) & "Você confirma?", vbYesNo, "Atenção")
    If intRes = vbYes Then 'respondeu sim
    ContarReg = 1 & "/" & MesData & "/" & AnoData
    Else 'continua a contagem atual
    strNum = Left(strMax, (InStr(1, strMax, "/") - 1)) + 1
    ContarReg = strNum & "/" & CampoMes & "/" & AnoData
    End If
    End If
    End If
    tbl.Close
    Set DB = Nothing
    'formata o número
    ContarReg = StrZero(ContarReg, 11)
    End Function

    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 18:27

    Já tinha estudado esses exemplos! Não tem muito a ver com oque eu quero. Alguém sabe o código vba para me retornar as ultimas quatro letras digitadas?

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Sab 28 Maio 2011, 18:29

    Retornar para onde? Você quer digitar em um campo e elas aparecerem em outro? Ou substituir o digitado pelas 4 últimas no mesmo campo?


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7125
    Registrado : 11/05/2010

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  vieirasoft em Sab 28 Maio 2011, 18:30

    Utilize a função Rigth para retirar à direita e Left para retirar à esquerda

    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 19:06

    O problema é que vai ser substituido no mesmo campo. Se fosse em outro seria mais fácil. Eu vou digitar o ano que eu quero. No evento afterupdate do campo ele vai executar a função que eu escrevi:
    Private Sub Codigo_AfterUpdate()
    If Not IsNull(Me.Codigo) Then
    Dim contadorcodigo As Integer
    contadorcodigo = DCount("[codigo]", "dadoscomuns", "Left([codigo],4) = '" & codigo & "'")
    Me.Codigo.Value = contadorcodigo + 1
    End If

    End Sub
    So esta faltando a ultima linha do código que seria assim:
    Me.codigo.value = (o ano que digitei no campo codigo) & "/" & contadorcodigo + 1

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Sab 28 Maio 2011, 19:33

    Por que não tenta assim:

    Me.NomeCampo = Me.NomeCampo & "/" & Format(Right(DMax("Código", "NomeTabela"), 4, "000") + 1

    Você insere a data e ao dar Enter, são adicionados os 3 últimos dígitos do maior código mais um.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 19:34

    Consegui criar o código! Alguém sabe como passar ele pra uma public function?
    Private Sub codigo_AfterUpdate()
    If Not IsNull(Me.Codigo) Then
    Dim contadorcodigo As Integer
    Dim ano As String
    contadorcodigo = DCount("[codigo]", "dadoscomuns", "Left([codigo],4) = '" & Codigo & "'")
    ano = Me.Codigo.Value
    Me.Codigo.Value = ano & "/" & contadorcodigo + 1
    End If
    End Sub

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Sab 28 Maio 2011, 19:40


    Public Function FormataData()
    Dim contadorcodigo As Integer
    Dim ano As String
    If Not IsNull(Me.Codigo) Then
    contadorcodigo = DCount("[codigo]", "dadoscomuns", "Left([codigo],4) = '" & Codigo & "'")
    ano = Me.Codigo.Value
    Me.Codigo.Value = ano & "/" & contadorcodigo + 1
    End If
    End Function


    Aonde precisar, é só chamar:

    Call FormataData


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Sab 28 Maio 2011, 19:43

    Uma dica: não use DCount. Se por algum motivo um registro sumir, vai dar erro. Imagina que você tenha 200 registros e o último seja 200. Se sumir um, ficarão 199 registros. 199+1=200. Acontece que já tem o 200. Por isso eu prefiro usar DMax. Assim, não importa quantos registros tenha, será sempre o maior + 1.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 20:10

    Vc tem toda razão. Mas não estou conseguindo utilizar seu código. Parece que está faltando um parentese... dá erro

    Private Sub codigo_AfterUpdate()
    If Not IsNull(Me.Codigo) Then

    Me.codigo = Me.codigo & "/" & Format(Right(DMax("Codigo", "dadoscomuns), 4, "000") + 1
    End If
    End Sub

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Sab 28 Maio 2011, 20:20

    Sim, na expressão colocada estão faltando um parêntese e aspas de fechamento. Observe que você abriu três parênteses e só fechou dois. E ficou faltando fechar aspas em dadoscomuns. Veja se é isso que está faltando.


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Sab 28 Maio 2011, 20:34

    Coloquei assim:
    Private Sub codigo_AfterUpdate()
    If Not IsNull(Me.Codigo) Then
    Dim contadorcodigo As Integer
    Dim ano As String
    contadorcodigo = Format(Right(DMax("Codigo", "dadoscomuns"), 4, "000") + 1)
    ano = Me.Codigo
    Me.Codigo = ano & "/" & contadorcodigo

    End If
    End Sub
    e está dando erro de compilação: Número de argumento incorreto ou atribuição de propriedade inválida.

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Sab 28 Maio 2011, 20:52

    Teste essa linha assim:

    contadorcodigo = Format(Right(DMax("Codigo", "dadoscomuns"), 4), "000") + 1


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    Antonybrazil
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 102
    Registrado : 13/04/2011

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  Antonybrazil em Dom 29 Maio 2011, 05:53

    Parece que consegui! Por favor deem um olhada no código que desenvolvi. obrigado
    Public Function ContadordeRegistros(Codigo As String)


    Dim Strnum As String, DB As Database
    Dim strMax As String, CampoAno As String
    Dim AnoData As String, rs As Recordset
    Dim Numreg As Integer
    Set DB = CurrentDb
    Set rs = DB.OpenRecordset("dadoscomuns")
    Numreg = rs.RecordCount
    AnoData = Codigo


    If Numreg = 0 Then
    ContadordeRegistros = AnoData & "/" & 1
    Else
    strMax = Codigo
    CampoAno = DCount("[codigo]", "dadoscomuns", "Left([codigo],4) = '" & Codigo & "'")
    If CampoAno >= 1 Then
    Strnum = DMax("Mid([codigo],6, 3)", "dadoscomuns", "Left([codigo],4) = '" & Codigo & "'") + 1
    ContadordeRegistros = AnoData & "/" & Strnum
    Else
    ContadordeRegistros = AnoData & "/" & 1
    End If
    End If

    Set DB = Nothing

    End Function

    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7125
    Registrado : 11/05/2010

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  vieirasoft em Dom 29 Maio 2011, 11:17

    SE está a funcionar, só temos agradecer o retorno. Obrigado.

    criquio
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Re: [Resolvido]Criar autonumeração xxxx/n

    Mensagem  criquio em Dom 29 Maio 2011, 12:45

    Ótimo trabalho, embora eu acho que daria para ter usado apenas uma linha de código com a função que eu passei. Eu tenho isso no evento "Após atualizar" do campo txtCódigo de um aplicativo assim:

    Me.txtCódigo = Me.txtCódigo & "/" & Format(Right(DMax("Código", "tblClientes"), 3) + 1, "000")

    O campo Código na tabela é tipo Número e está com Formato 0000/000. O código acima é para formatação de campos já existentes. Para adicionar o ano corrente, seria assim:

    Me.txtCódigo = Year(Date) & "/" & Format(Right(DMax("Código", "tblClientes"), 3) + 1, "000")

    ou ainda assim:

    Me.txtCódigo = Format(now, "yyyy") & "/" & Format(Right(DMax("Código", "tblClientes"), 3) + 1, "000")

    Obviamente pode-se ainda omitir o campo Me.txtCódigo caso o registro seja gravado via RecordSet, o que seria algo assim:

    rs("Código") = Year(Date) & "/" & Format(Right(DMax("Código", "tblClientes"), 3) + 1, "000")


    .................................................................................
    Meu novo site: [Você precisa estar registrado e conectado para ver este link.]

    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.


    marianeves
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Portugal
    Mensagens : 5
    Registrado : 22/05/2014

    Autonumeraçao

    Mensagem  marianeves em Qui 22 Maio 2014, 23:18

    Olá!

    Utilizei um código semelhante para gerar automaticamente uma numeração alfanmérica. Funcionou na perfeição, até que dividi a BD em Back e front... Aí dá erro e não executa!

    Sabem dizer-me porque será?

    Muito e muito obrigada pela vossa atenção!

      Data/hora atual: Sab 03 Dez 2016, 19:38