MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [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?

    Compartilhe
    avatar
    wsenna
    Developer
    Developer

    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?

    Mensagem  wsenna em Qui 01 Jun 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
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    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  ahteixeira em Sex 02 Jun 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
    avatar
    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

    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 em Sex 02 Jun 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
    avatar
    Dilson
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    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 em Sex 02 Jun 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.  
    avatar
    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

    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 em Sab 03 Jun 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
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    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  ahteixeira em Sab 03 Jun 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
    avatar
    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

    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 em Sab 03 Jun 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
    Anexos
    ProcessosWSenna.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (486 Kb) Baixado 3 vez(es)


    Última edição por wsenna em Seg 12 Jun 2017, 18:12, editado 4 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    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  ahteixeira em Dom 04 Jun 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
    avatar
    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

    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 em Dom 04 Jun 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


    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    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  ahteixeira em Dom 04 Jun 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

      Data/hora atual: Qui 21 Set 2017, 02:34