MaximoAccess

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

Obrigado

Administração do MaximoAccess

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]Atualizar os dados em subformulário como se estivesse redigitando o campo

    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 17/1/2020, 18:16

    Olá, gostaria de ajuda para resolver a questão abaixo:

    Em um subformulário tenho campos que são capturados através do .VALUE

    Assim sendo, quando estou digitando o nome do produto, no evento após atualizar ele me traz o valor pago nesse produto pela última vez.

    O que preciso é fazer com que apos clicar em um determinado botão, os campos desse subformulário, especificamento o de produto, pudesse fazer algo que atualizasse os outros campos que estão amarrados a ele através do evento após atualizar.

    já tentei o Recalc e Refresh, porém sem sucesso.


    Agradeço desde já
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 17/1/2020, 22:14

    Acesse o campo do produto, altere o escopo do evento "após atualizar" de Private para Public.

    No seu botão, então basta usar o código
    Código:
    Me!NomeControleSubFormNoFormPrincipal.Form.CampoDoProduto_AfterUpdate


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 17/1/2020, 22:22

    Boa noite Damasceno!

    deu certo, apenas quando estou selecionando a linha do sub.
    Gostaria de saber como ele atualiza todas as linhas que tem preenchimento com apenas um toque no botão, sem ter que selecionar um a um.


    agradeço a disposição
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 17/1/2020, 23:06

    Faltou dizer então que seu subformulário é do tipo contínuo ou folha de dados, onde esse tipo exibe vários registros ao mesmo tempo.

    Nesse caso, no seu botão do formulário principal, tenha um código que use recordset para fazer loop em todos os registros do subformulário, com um código que faça a mesma coisa que o evento após atualizar do seu campo faz.

    Por exemplo: digamos que no evento após atualizar de um campo no subformulário chamado "numero" você especifique no campo "par_impar" seu o número é par ou é impar.

    Código:
    Private Sub numero_AfterUpdate()
       
        If Me!numero.Value Mod 2 = 0 Then
            Me!par_impar.Value = "par"
        Else
            Me!par_impar.Value = "impar"
        End If

    End Sub

    No botão do seu formulário principal seria usado o seguinte código (que, em parte, faz o que o código do evento após atualizar faz)

    Código:
    Public Sub SeuBotao_Click()

        Dim objRS As DAO.Recordset
       
        Set objRS = Me!controleSubFormulario.Form.Recordset
       
        If objRS.RecordCount > 0 Then
           
            Call objRS.MoveFirst
            Do
           
                Call objRS.Edit
                    If objRS!numero.Value Mod 2 = 0 Then
                        objRS!par_impar.Value = "par"
                    Else
                        objRS!par_impar.Value = "impar"
                    End If
                Call objRS.Update
                Call objRS.MoveNext
           
            Loop Until objRS.EOF
           
        End If
       
        Set objRS = Nothing

    End Sub


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 17/1/2020, 23:20

    Cara ainda sou leigo em vba, mas acho que está quase lá.

    No evento após atualizar do meu subformulário que está na combox [produto] está assim:

    Ean.Value = produto.Column(0)
    vendaultimo.Value = produto.Column(2)
    Me.data_atual.Value = produto.Column(3)


    Meu botão ficou desse jeito, mas está dando algo errado.

    Dim objRS As DAO.Recordset

    Set objRS = Me!SUB_Det_lista_Vendas.Form.Recordset

    If objRS.RecordCount > 0 Then

    Call objRS.MoveFirst
    Do

    Call objRS.Edit
    Ean.Value = produto.Column(0)
    vendaultimo.Value = produto.Column(2)
    Me.data_atual.Value = produto.Column(3)

    Call objRS.Update
    Call objRS.MoveNext

    Loop Until objRS.EOF

    End If

    Set objRS = Nothing
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 17/1/2020, 23:26

    Cara ainda sou leigo em vba, mas acho que está quase lá.

    Nesse caso, anexe aqui seu banco de dados para uma ajuda certeira.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 17/1/2020, 23:59

    Damasceno, acho que do jeito que fiz no bd dá para ver onde estou errando.

    Te agradeço mais uma vez.

    Segue o Link:

    https://www.dropbox.com/s/wntwndvbar0es8u/atualizar_sub%20-%20Copia.zip?dl=0
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 18/1/2020, 02:58

    Baixe o anexo e teste

    Códigos utilizados

    Botão no formulário principal
    Código:
    Dim objRS1 As DAO.Recordset
        Dim objRS2 As DAO.Recordset
        
        Set objRS1 = Me!SUB_Det_lista_Vendas.Form.Recordset

        If objRS1.RecordCount > 0 Then
        
            Set objRS2 = CurrentDb.OpenRecordset("SELECT tblCad_Produto.ean, [Cs_precomedio-exclusivo-final-1].Último " & _
                                                 "FROM tblCad_Produto INNER JOIN [Cs_precomedio-exclusivo-final-1] ON tblCad_Produto.ean = [Cs_precomedio-exclusivo-final-1].ean;", , 4)

            If objRS2.RecordCount > 0 Then

                Call objRS1.MoveFirst
                Do

                    Call objRS1.Edit
                        objRS1!ean.Value = objRS1!produto.Value
                        objRS1!vendaultimo.Value = fncBuscaValor(objRS1!produto.Value, objRS2)
    '                Me.data_atual.Value = produto.Column(3)
                    Call objRS1.Update
                    Call objRS1.MoveNext

                Loop Until objRS1.EOF

            End If
            
            Call objRS2.Close: Set objRS2 = Nothing
            
        End If

        Set objRS = Nothing

    Função auxiliar

    Código:
    Private Function fncBuscaValor(produto, objRecordSet As DAO.Recordset)

        Call objRecordSet.MoveFirst
        
        Do
        
            If produto = objRecordSet!ean.Value Then
                fncBuscaValor = objRecordSet.Fields(1).Value
                Exit Function
            End If
            
            Call objRecordSet.MoveNext
            
        Loop Until objRecordSet.EOF
        
        fncBuscaValor = 0

    End Function
    Anexos
    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Attachmentatualizar_sub_rev.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.3 Mb) Baixado 10 vez(es)


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 18/1/2020, 12:24

    Bom dia Damasceno!

    Os códigos rodaram como eu queria, porém o campo de Data atual, que equivale a data de última compra do produto, não atualiza.(essa label confunde, vou trocar).
    Já tentei entender o procedimento para ver se conseguia resolver sozinho, mas infelizmente ainda não possuo os conhecimentos necessários.
    Você pode me ajudar novamente?

    Abraço
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 18/1/2020, 13:14

    Infelizmente não sei como ajudá-lo nessa parte. O evento "após atualizar" da caixa de combinação "produto" não tem essa instrução, assim como não possui uma quarta coluna (no caso - Column(3)). Nem a fonte do registro do subformulário possui um campo específico para receber este valor.

    (essa label confunde, vou trocar)
    então aguardo


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 18/1/2020, 14:14

    Desculpe, acho que na correria de resolver o problema eu não havia preparado corretamente o arquivo.

    Agora está na tabela da sub, e também nas consultas.
    Deixei também pronto para a coluna 3

    segue o anexo para analise.
    Anexos
    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Attachmentatualizar_sub - Rev-1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.4 Mb) Baixado 12 vez(es)
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 19/1/2020, 18:52

    Códigos utilizados...

    Botão no formulário principal (ajuste na sql do objrs2, na interação com a função auxiliar fncBuscaValor, e adição do objrs1.data_ultimo)
    Código:
    Dim objRS1 As DAO.Recordset
        Dim objRS2 As DAO.Recordset
       
        Set objRS1 = Me!SUB_Det_lista_Vendas.Form.Recordset

        If objRS1.RecordCount > 0 Then
       
            Set objRS2 = CurrentDb.OpenRecordset("SELECT tblCad_Produto.ean, [Cs_precomedio-exclusivo-final-1].Último, [Cs_precomedio-exclusivo-final-1].ÚltimoDeMáxDedata " & _
                                                "FROM tblCad_Produto INNER JOIN [Cs_precomedio-exclusivo-final-1] ON tblCad_Produto.ean = [Cs_precomedio-exclusivo-final-1].ean;", , 4)

            If objRS2.RecordCount > 0 Then

                Call objRS1.MoveFirst
                Do

                    Call objRS1.Edit
                        objRS1!ean.Value = objRS1!produto.Value
                        objRS1!vendaultimo.Value = fncBuscaValor(1, objRS1!produto.Value, objRS2)
                        objRS1!data_ultimo.Value = fncBuscaValor(2, objRS1!produto.Value, objRS2)
                    Call objRS1.Update
                    Call objRS1.MoveNext

                Loop Until objRS1.EOF

            End If
           
            Call objRS2.Close: Set objRS2 = Nothing
           
        End If

        Set objRS = Nothing

    Função auxiliar (adição de um novo parâmetro chamado bytCampo)
    Código:
    Private Function fncBuscaValor(bytCampo As Byte, produto, objRecordSet As DAO.Recordset)

        Call objRecordSet.MoveFirst
       
        Do
       
            If produto = objRecordSet!ean.Value Then
                fncBuscaValor = objRecordSet.Fields(bytCampo).Value
                Exit Function
            End If
           
            Call objRecordSet.MoveNext
           
        Loop Until objRecordSet.EOF
       
        fncBuscaValor = 0

    End Function


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 19/1/2020, 19:17

    Boa tarde Damasceno!

    Vou inserir o código no meu projeto e depois retorno para informar como ficou.
    Agradeço muito pela sua ajuda.
    Espero poder entender o código e aprender como assim como vocês.
    Abraço
    avatar
    lpdias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 127
    Registrado : 11/01/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  lpdias em 20/1/2020, 11:12

    Bom dia Damasceno!

    Funcionou perfeitamente.
    Te agradeço muito pela ajuda.

    Forte abraço
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2229
    Registrado : 22/11/2016

    [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo Empty Re: [Resolvido]Atualizar os dados em subformulário como se estivesse redigitando o campo

    Mensagem  DamascenoJr. em 20/1/2020, 22:22

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

      Data/hora atual: 1/10/2020, 04:14