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

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  wsenna 1/6/2017, 18:15

    Olá Amigos, boa tarde.

    Numa tabela possuo um campo Caixa (numérico) que deve conter o valor 1 para os 50 primeiros registros, 2 para os próximos 50 registros, 3 para os próximos e assim por diante.

    Já fundi a cuca e ainda não consegui vislumbrar uma solução.

    Observação: Meu Access é 2003.

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  Alvaro Teixeira 2/6/2017, 00:37

    Olá amigo Wsenna,

    Não sei como está a fazer o agrupamento de 50 em 50.
    Se for por FOR, basta ter uma variavel Contador que vai incrementando a cada 50.

    Outra alternativa é por contas:
    50/50=1
    100/50=2
    150/50=3
    ...
    No entanto só pretende fazer a conta de 50 em 50, para isso eftuamos a divisão por 50 e verificamos se o resultado é zero através da função nativa do Accces Mod.

    Será algo assim:
    Código:
    Dim xRegisto, xContador As Integer
    xRegisto = SeuCampoQueTemONumeroDeLinhas '49,50..

    If xRegisto Mod 50 = 0 Then
       xContador = xRegisto / 50
    End If

    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  wsenna 2/6/2017, 21:15

    Olá ATeixeira, boa tarde.

    Amigão, Possuo uma tabela "tblCadProc" que dentre outros campos possui um, Proc do tipo Texto, que de acordo com o número digitado o sistema preenche outro campo com o nome do Setor referente à sequência de número digitado.
    Código:

    If Not IsNull([Proc]) Then
    Me.Num = right(SeparaNomes([Proc], "/", 1), 6)
    Me.DtEvento = Date
    Else
    Me.Num = Null
    Me.DtEvento = Null
    End If

    If Me.Num > 0 And Me.Num < 10000 Then
    Me.Setor = "GPCA"
    ElseIf Me.Num > 9999 And Me.Num < 13000 Then
    Me.Setor = "PSPV/CTC"
    ElseIf Me.Num > 19999 And Me.Num < 23000 Then
    Me.Setor = "PSG/CES"
    ElseIf Me.Num > 29999 And Me.Num < 33000 Then
    Me.Setor = "PSAS/CCM"
    ElseIf Me.Num > 39999 And Me.Num < 43000 Then
    Me.Setor = "PSV/CEG"
    ElseIf Me.Num > 49999 And Me.Num < 60000 Then
    Me.Setor = "GPCA"
    ElseIf Me.Num > 71999 And Me.Num < 73000 Then
    Me.Setor = "SPR/PUVR"
    ElseIf Me.Num > 72999 And Me.Num < 74000 Then
    Me.Setor = "SPR/PURO"
    ElseIf Me.Num > 76999 And Me.Num < 79000 Then
    Me.Setor = "HUAP"
    ElseIf Me.Proc = "" Then
    Me.Setor = ""
    Me.Num = ""
    Me.Pag = ""
    Me.Caixa = ""
    Me.DtEvento = ""
    End If

    Assim, num subformulário o usuário vai preenchendo os registros apenas digitanco a numeração do processo e os demais campos como DtEvento do tipo Data/Hora com valor padrão = Data(), Setor do tipo Texto  se auto preenchem.
    Nesse subformulário possuo, ainda, um campo Caixa do tipo numérico que deveria receber um valor como:
    1 para os primeiros 50 registros de um determinado setor, 2 para os registros de 51 a 100, 3 para 101 a 150 e por aí vai.
    O grande problema é que os processos a serem digitados não estão em ordem por numeração de Setor, e assim a coisa complica, pois não há como guardar de cabeça a que Setor pertence uma determinada sequência numérica.
    Então, partindo dessa premissa, criei uma consulta em que os Setores são filtrados através de uma caixa de combinação.

    SELECT tblCadProc.CodProc, tblCadProc.DtEvento, tblCadProc.Num, tblCadProc.Setor, tblCadProc.Pag, [Prefix] & "." & [Proc] AS Processo, tblCadProc.Caixa
    FROM tblCadProc
    WHERE (((tblCadProc.Setor)=[Forms]![frmPrinterProc2]![Setor]))
    ORDER BY tblCadProc.DtEvento, tblCadProc.Num;

    O que realmente pretendo é ao abrir esse segundo formulário "frmPrinterProc" que contem o subformulário baseado na consulta acima, "frmPrinterProcSub", de algum modo preencher o campo Caixa como explicado acima: 1 para os 50 primeiros registros, 2 para os registros de 51 a 100, 3 para os registros de 101 a 150 e assim sucessivamente, lembrando que agora os registros estão agrupados por Setor.

    Abraços, e desculpe-me a demora em responder.

    WSenna

    PS. Access 2003
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1743
    Registrado : 11/11/2009

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  Dilson 2/6/2017, 23:46

    A Função:

    Public Function CalculaSetor(argSetor As String)
    Dim rs As DAO.Recordset
    Dim Contador As Integer
    Set rs = CurrentDb.OpenRecordset("SELECT DISTINCT Setor, " _
                                  & "Count(Setor) AS [TotalSetor] " _
                                  & "FROM NomeDaTabela " _
                                  & "WHERE Setor='" & argSetor & "' GROUP BY Setor;")
    Contador = rs(1)
    rs.Close
    Set rs = Nothing
    If Contador <= 50 Then
          CalculaSetor = 1
    ElseIf Contador > 50 And Contador <= 100 Then
        CalculaSetor = 2
    ElseIf Contador > 100 And Contador <= 150 Then
        CalculaSetor = 3
    ElseIf Contador > 150 And Contador <= 200 Then
        CalculaSetor = 4
    Else
        CalculaSetor = 0
    End If
    End Function


    Modo de uso:
    Coloque uma caixa de texto no subformulário e na Fonte do Controle coloque:
    =CalculaSetor([Setor])

    A função consiste basicamente em receber o nome do setor para processar a contagem de registros e dependendo da quantidade retornar o número de classificação.  
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  wsenna 3/6/2017, 01:42

    Olá Dilson, boa noite.

    Amigão, a coisa não funcionou muito bem.
    Até que a caixa de texto recebeu um valor correto, exemplo: No Setor SPV/CEG existem 79 registros e ao contar o resultado proposto por você constatei que haviam vários registros antes mesmo do quinquagésimo com valor 2 o que acarretou 63 primeiros registros com valor 2 e 16 últimos com valor 1.

    Contudo, continuarei examinando a sua proposta pois achei ótima e devo encontrar alguma coisa que esteja interferindo.

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  Alvaro Teixeira 3/6/2017, 11:17

    Olá a todos,
    Wsenna, talvez seja melhor criar uma base de dados com o form e questão e dados de amostragem para podernos testar.
    Essa numeração é para ficar gravada na tabela ou é para gerar sempre que abrir o tal formulario.
    Abraço a todos
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  wsenna 3/6/2017, 14:25

    Olá Feras de plantão, bom dia.

    Atendendo à solicitação do Mestre AHTeixeira estou encaminhando parte do meu aplicativo que se refere à questão acima discutida.
    Devo informar que no subformulário frmCadProcSub existe o campo Caixa que o recolhi para a esquerda pois não havia meios de faze-lo se autopreencher de acordo com o que se discute.
    Tal tarefa está sendo executada manualmente por ocasião da abertura do Módulo de Impressão o que foge por completo ao padrão de automação que procuro incrementar em todos os meus aplicativos, afinal penso que o Computador deve trabalhar para a gente e não ao contrário.
    Caso tenham alguma ideia muito grato ficarei.

    Tenham todos um ótimo final de semana.

    Abraços, WSenna


    Última edição por wsenna em 12/6/2017, 18:12, editado 4 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  Alvaro Teixeira 4/6/2017, 16:30

    Olá a todos,
    Wsenna, a melhor forma é via recordset.
    E optei por fazer a todos os setores antes de abrir o Form no botão "Módulo de Impressão".

    Altere o seu código por este e teste:
    Código:
    Private Sub Comando26_Click()
    On Error GoTo Err_Comando26_Click
    '-----------------------------------------
    'ahteixeira (2017) MaximoAccess
    Dim rsSetor, rsCaixa As DAO.Recordset, strSqlSetor, strSqlCaixa As String, k As Long
        
        strSqlSetor = "SELECT tblCadProc.Setor FROM tblCadProc GROUP BY tblCadProc.Setor;"
        Set rsSetor = CurrentDb.OpenRecordset(strSqlSetor)
        
        'verifica se tem setores
        If rsSetor.RecordCount > 0 Then
            Do While Not rsSetor.EOF
                'se tiver abre recordeset para ediar Caixa
                strSqlCaixa = "SELECT tblCadProc.DtEvento, tblCadProc.Num, tblCadProc.Setor, tblCadProc.Caixa " _
                            & "FROM tblCadProc WHERE tblCadProc.Setor = '" & rsSetor!Setor _
                            & "' ORDER BY tblCadProc.DtEvento, tblCadProc.Num;"
                
                Set rsCaixa = CurrentDb.OpenRecordset(strSqlCaixa)
                
                    'se tiver registos efetua numeraçao
                    If rsCaixa.RecordCount > 0 Then
                        k = 1
                        Do While Not rsCaixa.EOF
                            rsCaixa.Edit
                                rsCaixa!Caixa = k
                            rsCaixa.Update
                            rsCaixa.MoveNext
                            If CInt(rsCaixa.AbsolutePosition) Mod 50 = 0 Then k = k + 1
                        Loop
                    End If
                    
                rsCaixa.Close
                Set rsCaixa = Nothing
            rsSetor.MoveNext
            Loop
        End If
        
        rsSetor.Close
        Set rsSetor = Nothing

        DoEvents
            
        MsgBox "Atualizado o Caixa por Setor", vbInformation, ""
    '-----------------------------------------


       DoCmd.OpenForm "frmPrinterProc2"
        
    Exit_Comando26_Click:
        Exit Sub

    Err_Comando26_Click:
        MsgBox err.Description
        Resume Exit_Comando26_Click
        
    End Sub

    Abraço e bom Domingo
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  wsenna 4/6/2017, 18:30

    Ah! Teixeira, boa tarde Amigão. (desculpe-me o trocadilho)


    Cara, melhor não poderia ficar.
    É obra de Mestre dos mais altos conhecimentos em VBA, parabéns, fico até emocionado, uma obra prima de engenharia computacional.

    Muitíssimo obrigado mesmo.

    Abraços e um beijo em seu coração.

    WSenna


    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  Alvaro Teixeira 4/6/2017, 19:24

    Amigo Wsenna, fico feliz por ter ajudado.
    Obrigado pelo retorno.
    Abraço forte de terras Lusas para os amigos Wsenna e Dilson.
    cheers

    Conteúdo patrocinado


    [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante? Empty Re: [Resolvido]Como atribuir o valor 1 a um campo Calculado para os 50 primeiros registros, 2 para os próximos 50 registros e assim por diante?

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 16:45