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]Atualizar mais campos com Insert Into

    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  vileman 10/7/2017, 00:51

    Boa noite. ** Uso Access 2003

    Após usar os comandos: CurrentDb.Execute "INSERT INTO ..." (ver comandos completos abaixo) gostaria de atualizar no novo registro outros campos que não tem vínculo correspondente entre si entre as 2 tabelas envolvidas.

    Resumo:
    Formulário principal: F10_Consumo    (Tabela: T10_Consumo)
    subformulário: F102_ConsumoXPagto (Tabela: T102_ConsumoXPagto)
    * Entre as tabelas acima existe um Relacionamento um-para-vários, respectivamente.

    A rotina segue abaixo:
    Private Sub TipoContabil_AfterUpdate() 'Este campo fica no formulário principal
           On Error Resume Next
           If TipoContabil = 5 Or TipoContabil = 6 Then  '5:Cartão de Crédito / 6:Cartão Refeição
              Me!ModoPagto = 1       '1: Pagto. Único
              Me.ValorSomatorio = ValorAPagar
              Me!ValorPago = ValorAPagar

              CurrentDb.Execute "INSERT INTO T102_ConsumoXPagto (IDConsumo, DataPagto, ValorPagto, Usuario, DataUsuario) " & _
                           "SELECT CodConsumo, DataConsumo, ValorAPagar, Usuario, DataUsuario FROM T10_Consumo " & _
                           "WHERE CodConsumo=" & Me!CodConsumo & ";", dbFailOnError
             
    Me!Forms!F102_ConsumoXPagto!Taxa = IDOperadora.Column(2)         'TESTE. Funcionou ?? Não
    Me!Forms!F102_ConsumoXPagto!Prazo = IDOperadora.Column(3)        'TESTE. Funcionou ?? Não
    Me!Forms!F102_ConsumoXPagto!ValorTaxa = ValorPagto * Taxa / 100  'TESTE. Funcionou ?? Não
    Me!Forms!F102_ConsumoXPagto!DataAReceber = DataPagto + Prazo    'TESTE. Funcionou ?? Não

             
              Me.Requery                             'Atualiza SubFormulário após incluir Novo Registro
              MsgBox "** ATENÇÃO: Lançamento feito com sucesso !", , "Sistema: Aviso de Operação"
              DoCmd.GoToRecord , , acLast            'Posiciona no ÚLTIMO Registro
              DoCmd.GoToControl "F102_ConsumoXPagto"
           End If
    End Sub

    Vejam acima:
    Minha intenção é ao inserir um novo registro (funcionando perfeitamente após ajuda de Alexandre Neves) atualizar os campos que são da Tabela ‘T102_ConsumoXPagto’ que é a tabela que recebe os dados do novo registro a partir de alguns campos da tabela T10_Consumo, conforme rotina mencionada acima.

    Campos a serem atualizados no novo registro, conforme os comandos acima no subformulário: ‘F102_ConsumoXPagto’ (Tabela: T102_ConsumoXPagto)
    Taxa = captura o valor da coluna 2 do campo ‘IDOperadora’  (Tabela ‘T102_ConsumoXPagto’)
    Prazo = captura o valor da coluna 3 do campo ‘IDOperadora’ (Tabela ‘T102_ConsumoXPagto’)
    ValorTaxa = captura o valor do campo ‘ValorPagto’ multiplica pelo valor do campo ‘Taxa’ e divide por 100
    DataAReceber  = captura a data do campo ‘DataPagto’ acrescentando o valor em dias do campo ‘Prazo’

    PS: Campo (Em Caixa de Combinação) ‘IDOperadora’ => Origem da Linha: SELECT T12_Operadoras.CodOperadora, T12_Operadoras.NomeOperadora, T12_Operadoras.TaxaOperadora, T12_Operadoras.PrazoOperadora FROM T12_Operadoras;

    Para tentar fazer inseri os comandos que estão em vermelho, mas aparece a mensagem: “Erro em tempo de execução ‘424’. O objeto é obrigatório.” Ao Depurar aponta para a linha:
    Me!Forms!F102_ConsumoXPagto!Taxa = IDOperadora.Column(2)  
    .... O Sistema não pode localizar o campo ‘Forms’ referido...
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 11/7/2017, 03:26

    Olá


    Esses campos que irão receber os valores

    Taxa
    Prazo
    ValorTaxa
    DataAReceber

    estão no seu formulário onde executas o comando ou estão num subformulário dentro desse forms ?

    Pelo que entendi,


    F102_ConsumoXPagto é o seu subformulário dentro do formulário principal correto ?
    E dentro dele á um campo chamado Taxa.

    Se for isso, esse comando Me!Forms!F102_ConsumoXPagto!Taxa não será aceito com o Me, (observe na msg de erro que ele se refere ao forms como se fosse um campo)

    Tente

    F102_ConsumoXPagto.Form!Taxa =


    Observe o seguinte:

    Quando vc tem os controles (campos, cx seleção, list) num formulário aberto e atual, se referimos a eles tais como:

    ME.campo, Me!Selecao

    Quando esses controles estão dentro de um subformulário nesse formulário, devemos se referir a eles tais como:

    NomeDoSubFormulário.Form!NomeDoCampoDoSubFormulário



    Agora, se os controles estiverem dentro de outro formulário:

    [Forms]![NomeDoFormulário]![NomeDoCampo]


    E se for um subformulário em outro formulário :

    [Forms]![NomeDoFormulário]![NomeDoSubFormulário].Form![NomeDoCampo]


    Teste e retorne se deu

    Abraços



    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 11/7/2017, 18:02

    Olá, boa tarde.

    Sim, todos esses campos estão no subformulário ‘F102_ConsumoXPagto’, que por sua vez está dentro do formulário principal ‘F10_Consumo’

    Testei conforme sua orientação e ficou assim: (sua orientação está em vermelho):
    PS: A rotina correta é essa que segue abaixo, pois quando postei tinha outras condições no evento (TipoContabil = 5 ou 6 e sem o campo 'IDOperadora'), mesmo assim o raciocínio e a finalidade são as mesmas aqui já descritas.

    Private Sub TipoContabil_AfterUpdate() 'Este campo fica no formulário principal
           On Error Resume Next
           
           If TipoContabil = 1 Then  '1:Dinheiro
              Me!ModoPagto = 1       '1: Pagto. Único
              Me.ValorSomatorio = ValorAPagar
              Me!ValorPago = ValorAPagar

              CurrentDb.Execute "INSERT INTO T102_ConsumoXPagto (IDConsumo, DataPagto, ValorPagto, IDOperadora, Usuario, DataUsuario) " & _
                           "SELECT CodConsumo, DataConsumo, ValorAPagar, TipoContabil, Usuario, DataUsuario FROM T10_Consumo " & _
                           "WHERE CodConsumo=" & Me!CodConsumo & ";", dbFailOnError
              Me.Requery   'Atualização Global = SubFormulário após incluir Novo Registro
              F102_ConsumoXPagto.Form!Taxa = F102_ConsumoXPagto.Form!IDOperadora.Column(2)
              MsgBox "** ATENÇÃO: Lançamento feito com sucesso !", , "Sistema: Aviso de Operação"
              DoCmd.GoToRecord , , acLast   'Posiciona no ÚLTIMO Registro.  
           End If

    Fiz 2 testes colocando os comandos em vermelho
    PS: Testei apenas com um campo: Taxa

    1º) Comando antes do “Me.Requery”
    Não apresenta nenhum erro. Acrescenta um registro em branco a mais além do Insert Into no subformulário, mesmo assim não atualiza o campo ‘Taxa’

    2º) Comando após “Me.Requery”
    Não apresenta nenhum erro. Acrescenta um registro normalmente no subformulário pelo Insert Into, mesmo assim não atualiza o campo ‘Taxa’ no subformulário.
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 11/7/2017, 20:01

    Olá

    Não entendi bem:

    Na mensagem inicial do tópico, vc informa que quer atualizar da seguinte forma:

    Taxa = captura o valor da coluna 2 do campo ‘IDOperadora’ (Tabela ‘T102_ConsumoXPagto’)
    Prazo = captura o valor da coluna 3 do campo ‘IDOperadora’ (Tabela ‘T102_ConsumoXPagto’)
    ValorTaxa = captura o valor do campo ‘ValorPagto’ multiplica pelo valor do campo ‘Taxa’ e divide por 100
    DataAReceber = captura a data do campo ‘DataPagto’ acrescentando o valor em dias do campo ‘Prazo’

    Esse comando que vc inseriu:
    F102_ConsumoXPagto.Form!Taxa = F102_ConsumoXPagto.Form!IDOperadora.Column(2)

    Diz que o campo taxa do sub formulário F102_ConsumoXPagto, deve ser igual ao campo IDOperadora.Column(2), do mesmo sub formulário.
    Obvio que não irá capturar o valor da tabela T102_ConsumoXPagto campo IDOperadora.Column(2) e informar no campo taxa do seu sub.

    Desse jeito, é como se toda vez que vc inserisse um valor no campo IDOperadora.Column(2) esse mesmo valor seria inserido automaticamente no campo taxa e ambos estejam no mesmo sub formulário.

    O que vc pretende pelo que entendi é capturar o valor do campo IDOperadora acredito que o último registro da tabela T102_ConsumoXPagto campo IDOperadora.Column(2) e inserir ele no campo taxa do seu sub form.
    Mas e esse campo IDOperadora.Column(2) ? ele esta no seu formulário onde esta esse sub ?.


    Post um exemplo ou parte do seu db para podermos verificar melhor o que ocorre e achar a solução.

    Aguardo



    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 11/7/2017, 22:42

    Olá,

    Na mensagem nº 1 observe que tem o seguinte:
    PS: Campo (Em Caixa de Combinação) ‘IDOperadora’ => Origem da Linha: SELECT T12_Operadoras.CodOperadora, T12_Operadoras.NomeOperadora, T12_Operadoras.TaxaOperadora, T12_Operadoras.PrazoOperadora FROM T12_Operadoras;

    A origem do campo 'IDOperadora' que existe no subformulároi é em uma outra tabela: 'T12_Operadoras' onde seria capturado o valor da Taxa e o Prazo pelo comando Column(2) e Column(3), respectivamente.

    Mesmo assim, acredito que será melhor eu postar parte da BD para seu melhor entendimento, então estou a providenciar e posto em seguida.
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 12/7/2017, 21:52

    Ok

    aguardo


    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 13/7/2017, 01:11

    Olá, Phillip_Junior

    Segue arquivo conforme o combinado. No próprio tem algumas explicações.
    Anexos
    [Resolvido]Atualizar mais campos com Insert Into AttachmentFMA - AtualizarMaisCamposComInsertInto.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (117 Kb) Baixado 25 vez(es)
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 14/7/2017, 03:36

    Olá companheiro



    Estava olhando agora seu projeto.

    Se Objetivo era :
    Taxa = captura o valor da coluna 2 do campo ‘IDOperadora’ (Tabela ‘T102_ConsumoXPagto’)
    Prazo = captura o valor da coluna 3 do campo ‘IDOperadora’ (Tabela ‘T102_ConsumoXPagto’)
    ValorTaxa = captura o valor do campo ‘ValorPagto’ multiplica pelo valor do campo ‘Taxa’ e divide por 100
    DataAReceber = captura a data do campo ‘DataPagto’ acrescentando o valor em dias do campo ‘Prazo’


    Abra seu forms F102_ConsumoXPagto e no evento após atualizar, já existente na sua cx de seleção IDOperadora cole esse código abaixo

    As linhas acrescentadas para solução estão anotadas.



    Private Sub IDOperadora_AfterUpdate()
    If IDOperadora = 3 Or IDOperadora = 4 Then
    Me.ValorPagto.SetFocus
    Else
    Me.IDBandeira.SetFocus
    End If

    Const MB_STOP_BUTTON = 16
    If IsNull([IDOperadora]) Or IsEmpty([IDOperadora]) Then
    MsgBox "ATENÇÃO !! Código da OPERADORA: Este campo NÃO pode ficar vazio !", MB_STOP_BUTTON, "Sistema GESTOR: Validação de Campo"
    Cancel = True
    End If

    ' Inicio da solução do problema

    Me.Taxa.Value = Me!IDOperadora.Column(2)
    Me.Prazo.Value = Me!IDOperadora.Column(3)
    Me.ValorTaxa.Value = Me.ValorPagto * Me.Taxa / 100
    Me.DataAReceber.Value = Me.DataPagto + Me.Prazo

    ' Fim


    End Sub



    Obs:

    Se os campos apresentarem erros de formatação, o que não tive ocorreu comigo, é só formatarmos os valores antes de ser inseridos no campo dentro do próprio código ok?

    Quando a gravar na tabela. Após preencher esses campos conforme a necessidade, basta criar um insert para adicionar todos os campos na tbl desejada.


    Se era o que precisava

    Abraços

    Caso contrário só falarmos que a gente tenta achar uma solução por aqui.




    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 14/7/2017, 03:53

    Olá

    Para registro

    Veja bem:

    O tópico solicitava que fosse buscado no campo IDOperadora’ (Tabela ‘T102_ConsumoXPagto’) o valor das colunas desse mesmo campo para serem apresentados em outros campos dentro desse mesmo subformulário e sem terem sido gravado os dados na tabela de registro ainda.

    Uma vez que estamos dentro do nosso formulário ou de nosso subformulário e desejamos buscar informações para outros campos *controles , precisamos observar se essas informações serão buscadas dentro de algum controle(campo, list, cx seleção e outros dentro do nosso próprio formulário ou subformulário ou se o valor inserido num campo deve realizar uma consulta num tbl onde os dados requeridos já estejam cadastrados.

    Sempre que formos se referir e precisar de informações entre os controles dentro do nosso formulário e subformulário, não é preciso criar consultas na tabela de origem desses campos para se obter a informação, exceto se salvo anteriormente e adicionado essa informação na tabela antes de requerida o valor ou informação.

    Basta se referirmos aos controles tais como Me = Tipo Minha, Meu controle e escrever as linhas do código necessário para o feito desejado.


    Super abraço


    Sucesso e Boa sorte



    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 15/7/2017, 00:13

    Olá

    Eu já tinha feito o que você sugeriu, ou seja, usado os comandos no subformulário 'F102_ConsumoXPagto' no evento 'Após atualizar' do campo ValorPagto (observe no arquivo enviado), veja abaixo:

    Private Sub ValorPagto_AfterUpdate()
           Me!Taxa = IDOperadora.Column(2)
           Me!Prazo = IDOperadora.Column(3)
           Me!ValorTaxa = ValorPagto * Taxa / 100
           Me!DataAReceber = DataPagto + Prazo
    End Sub

    Também poderia ser usado como você sugeriu, que funciona perfeitamente.
    Da forma como fiz acima também funciona, a diferença é que em ambas opções necessitaria de uma intervenção manual do usuário, a ideia era automatizar esse lançamento, porisso que estou tentando fazer a partir do evento 'Após atualizar' no campo 'TipoContabil', inclusive para usar em outras rotinas semelhantes a esta com necessidades similares.

    Observação:
    Gostaria também que ao executar e finalizar toda a rotina em questão ficasse posicionado no registro Atual, e não no último registro como está atualmente, pois como será um sistema usado em Rede de usuários não ficaria adequado.
    Seria possível ?

    Continuo pesquisando, mas, até agora não consegui resolver.

    PS: Tentei incluindo a linha de comando abaixo:
    CurrentDb.Execute "UPDATE T102_ConsumoXPagto SET Taxa = IDOperadora.Column(2) WHERE IDOperadora = 1"

    Mas, ao executar aparece a mensagem: "Erro em tempo de execução '3085': Função 'IDOperadora.column(2)' indefinida na expressão".
    Ao Depurar, aponta para a linha do comando acima.


    Última edição por vileman em 15/7/2017, 00:25, editado 2 vez(es) (Motivo da edição : a partir do PS: ...)
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Dilson 15/7/2017, 01:46

    Olá amigos!

    Vileman nesta linha:
    CurrentDb.Execute "UPDATE T102_ConsumoXPagto SET Taxa = IDOperadora.Column(2) WHERE IDOperadora = 1"

    Provável que o erro seja porque não usou aspas simples se IDOperadora.Column(2) for número ou aspas duplas se for texto.

    Se for número:
    CurrentDb.Execute "UPDATE T102_ConsumoXPagto SET Taxa = " & IDOperadora.Column(2) & " WHERE IDOperadora = 1"

    Se for texto:
    CurrentDb.Execute "UPDATE T102_ConsumoXPagto SET Taxa = '" & IDOperadora.Column(2) & "' WHERE IDOperadora = 1"


    Não cheguei entender o que pretende porque nesse caso torna-se difícil entender falando de formulário e subformulário. Mais fácil se fosse citado tabelas, os campos que as relacionam e quais campos envolvidos no update.

    Parece que se quer transportar dados de uma TabelaA (tabela Consumo que pertence ao formulário) para uma TabelaB (tabela xpagtos que pertence ao subformulário ao qual insere o novo registro.)

    Se isso fosse verdade poderíamos usar a atualização usando SQL (INNER JOIN) assim:

    CurrentDb.Execute ("UPDATE TabelaB INNER JOIN TabelaA " _
                    & "ON TabelaB.ChaveEstrangeira = TabelaA.ChavePrimaria " _
                    & "SET TabelaB.Taxa = TabelaA.X1, TabelaB.Prazo = TabelaA.X2")


    Basicamente essa instrução faz o encadeamento das chaves primarias com as estrangeiras e popula os dados que se quer de uma tabela à outra.

    Espero ter contribuído na busca da solução ideal para seu caso.
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 15/7/2017, 02:55

    Olá Amigo

    Agora que sentei e observei bem seu projeto.

    Vc quer apenas que ao selecionar o valor no campo TipoContabil, que após atualizar o valor das colunas dos campos IDOperadora sejam apresentados no campo Taxa e outros demais que informasse correto ?

    Pois bem !

    substitua esse código abaixo pelo seu do evento apos atualizar do seu campo TipoContabil e teste para ver se era o que vc precisava.

    Private Sub TipoContabil_AfterUpdate() 'TÓPICO: "Atualizar mais Campos com Insert Into" - Fórum MaximoAccess
    On Error Resume Next

    If TipoContabil = 1 Then '1:Dinheiro
    Me!ModoPagto = 1 '1: Pagto. Único
    Me.ValorSomatorio = ValorAPagar
    Me!ValorPago = ValorAPagar

    CurrentDb.Execute "INSERT INTO T102_ConsumoXPagto (IDConsumo, DataPagto, ValorPagto, IDOperadora, Usuario, DataUsuario) " & _
    "SELECT CodConsumo, DataConsumo, ValorAPagar, TipoContabil, Usuario, DataUsuario FROM T10_Consumo " & _
    "WHERE CodConsumo=" & Me!CodConsumo & ";", dbFailOnError
    Me.Requery 'Atualização Global = SubFormulário após incluir Novo Registro


    Me!DetalhedoPedidosub.SetFocus 'move o foco para o subformulario
    If F102_ConsumoXPagto.Form!IDOperadora > -1 Then
    F102_ConsumoXPagto.Form!Taxa = F102_ConsumoXPagto.Form!IDOperadora.Column(2)
    F102_ConsumoXPagto.Form!Prazo = F102_ConsumoXPagto.Form!IDOperadora.Column(3)
    F102_ConsumoXPagto.Form!ValorTaxa = F102_ConsumoXPagto.Form!ValorPagto * F102_ConsumoXPagto.Form!Taxa / 100
    F102_ConsumoXPagto.Form!DataAReceber = F102_ConsumoXPagto.Form!DataPagto + F102_ConsumoXPagto.Form!Prazo
    F102_ConsumoXPagto.Form!PagoSN = -1
    End If
    MsgBox "** ATENÇÃO: Lançamento feito com sucesso !", , "Sistema: Aviso de Operação"
    End If


    End Sub

    Aguardo


    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 15/7/2017, 23:50

    Olá a todos

    Dilson: O seu entendimento está parcialmente correto, caso possa ver no arquivo anexado na mensagem nº 7 acho que ficaria melhor para sua compreensão.

    As tabelas envolvidas têm entre entre si um Relacionamento 1 para vários, respectivamente:
    T10_Consumo             - Usa Formulário: F10_Consumo
    T102_ConsumoXPagto - Usa Subformulário: F102_ConsumoXPagto

    Não quero transportar dados da tabela 'T10_Consumo' para a tabela 'T102_ConsumoXPagto'.
    A pretensão em resumo é:

    1) Após criar um registro de Consumo do Cliente (Formulário:  F10_Consumo. Tabela: T10_Consumo), o mesmo vai fazer o pagamento no Caixa.
    2) No Caixa: A intenção é criar um novo registro na tabela 'T102_ConsumoXPagto' no evento 'Após atualizar' do campo 'TipoContabil' (Campo da tabela T10_Consumo) quando o mesmo for igual a 1 (Dinheiro).
    Nesse novo registro criado pela mesma rotina: Atualizar alguns campos na tabela 'T102_ConsumoXPagto' que seriam: Taxa, Prazo, ValorTaxa, DataAReceber e PagoSN, com os seguintes critérios para cada um dos campos:

    Taxa = captura o valor da coluna 2 do campo ‘IDOperadora’  
    Prazo = captura o valor da coluna 3 do campo ‘IDOperadora’
    ValorTaxa = captura o valor do campo ‘ValorPagto’ multiplica pelo valor do campo ‘Taxa’ e divide por 100
    DataAReceber  = captura a data do campo ‘DataPagto’ acrescentando o valor em dias do campo ‘Prazo’
    PagoSN = atualiza para -1 (Campo tipo Sim/Não)

    PS: Campo  ‘IDOperadora’ (Em Caixa de Combinação)=> Origem da Linha: SELECT T12_Operadoras.CodOperadora, T12_Operadoras.NomeOperadora, T12_Operadoras.TaxaOperadora, T12_Operadoras.PrazoOperadora FROM T12_Operadoras;

    T12_Operadoras
    CodOperadora - Autonumeração
    NomeOperadora - Texto
    TaxaOperadora - Número (inteiro. Casas decimais: 2)
    PrazoOperadora - Número (inteiro longo)

    Observação: Significa que o que preciso para capturar a Taxa e o Prazo estão em outra tabela: T12_Operadoras que é a origem do campo 'IDOperadora' no subformulário 'F102_ConsumoXPagto'

    Seguindo sua orientação tentei fazer das 2 formas:

    1) CurrentDb.Execute "UPDATE T102_ConsumoXPagto SET Taxa = " & IDOperadora.Column(2) & " WHERE IDOperadora = 1"
       Resultado: Inclui um novo registro, mas apresenta a mensagem: "Erro em tempo de execução 424: O Objeto é obrigatório", apontando para a linha acima
       PS: O campo 'Taxa' é tipo número, porisso coloquei como aspas simples.

    2) CurrentDb.Execute ("UPDATE T102_ConsumoXPagto INNER JOIN T10_Consumo " _
                    & "ON T102_ConsumoXPagto.CodPagto = T10_Consumo.CodConsumo " _
                    & "SET T102_ConsumoXPagto.Taxa = T12_Operadoras.TaxaOperadora, T102_ConsumoXPagto.Prazo = T12_Operadoras.PrazoOperadora")

       Resultado: Inclui um novo registro, mas apresenta a mensagem: "Erro em tempo de execução 3061: Parâmetros insuficientes. Eram esperados 2", aponta para todas as 3 linhas acima.

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Phillip_Junior: Fiz conforme orientado, mas não funcionou.
    Resultado: Inclui um novo registro, mas não atualiza os campos pretendidos.Sem Mensagem de erro.

    Ficou assim:

    Private Sub TipoContabil_AfterUpdate() 'TÓPICO: "Atualizar mais Campos com Insert Into" - Fórum MaximoAccess
           On Error Resume Next
           
           If TipoContabil = 1 Then  '1:Dinheiro
             Me!ModoPagto = 1        '1: Pagto. Único
             Me.ValorSomatorio = ValorAPagar
             Me!ValorPago = ValorAPagar

             CurrentDb.Execute "INSERT INTO T102_ConsumoXPagto (IDConsumo, DataPagto, ValorPagto, IDOperadora, Usuario, DataUsuario) " & _
                          "SELECT CodConsumo, DataConsumo, ValorAPagar, TipoContabil, Usuario, DataUsuario FROM T10_Consumo " & _
                          "WHERE CodConsumo=" & Me!CodConsumo & ";", dbFailOnError
             Me.Requery   'Atualização Global = SubFormulário após incluir Novo Registro
             
    'Me!F102_ConsumoXPagto.SetFocus 'move o foco para o subformulario * PS 1: Fiz a correção do nome do Subformulário
    'If F102_ConsumoXPagto.Form!IDOperadora = 1 Then                         * PS 2: Alterei para (= 1) estava como (> -1), mesmo assim o resultado foi o mesmo
    'F102_ConsumoXPagto.Form!Taxa = F102_ConsumoXPagto.Form!IDOperadora.Column(2)
    'F102_ConsumoXPagto.Form!Prazo = F102_ConsumoXPagto.Form!IDOperadora.Column(3)
    'F102_ConsumoXPagto.Form!ValorTaxa = F102_ConsumoXPagto.Form!ValorPagto * F102_ConsumoXPagto.Form!Taxa / 100
    'F102_ConsumoXPagto.Form!DataAReceber = F102_ConsumoXPagto.Form!DataPagto + F102_ConsumoXPagto.Form!Prazo
    'F102_ConsumoXPagto.Form!PagoSN = -1
    'End If
    'MsgBox "** ATENÇÃO: Lançamento feito com sucesso !", , "Sistema: Aviso de Operação"
    'End If
    'End Sub
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 16/7/2017, 02:27

    Olá


    Segue seu bd modificado.

    O código que informei estava faltando alguns detalhes, até pq entender o mecanismo de um projeto que não está em nossa mente, dificulta um pouco.

    Segue código alterado

             Me!F102_ConsumoXPagto.SetFocus 'move o foco para o subformulario
             F102_ConsumoXPagto.Form!IDOperadora = "1"
             If F102_ConsumoXPagto.Form!IDOperadora = "1" Then
                 F102_ConsumoXPagto.Form.Requery
                 F102_ConsumoXPagto.Form!Taxa = F102_ConsumoXPagto.Form!IDOperadora.Column(2)
                 F102_ConsumoXPagto.Form!Prazo = F102_ConsumoXPagto.Form!IDOperadora.Column(3)
                 F102_ConsumoXPagto.Form!ValorTaxa = F102_ConsumoXPagto.Form!ValorPagto * F102_ConsumoXPagto.Form!Taxa / 100
                 F102_ConsumoXPagto.Form!DataAReceber = F102_ConsumoXPagto.Form!DataPagto + F102_ConsumoXPagto.Form!Prazo
                 F102_ConsumoXPagto.Form!DataAReceber = F102_ConsumoXPagto.Form!DataPagto + F102_ConsumoXPagto.Form!Prazo
                 F102_ConsumoXPagto.Form!PagoSN = -1
             End If
             MsgBox "** ATENÇÃO: Lançamento feito com sucesso !", , "Sistema: Aviso de Operação"
          End If


    Abraços
    Anexos
    [Resolvido]Atualizar mais campos com Insert Into AttachmentFMA - AtualizarMaisCamposComInsertInto.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (122 Kb) Baixado 8 vez(es)


    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 19/7/2017, 02:00

    Olá, Phillip_Junior

    Desculpe a demora, mas estava vendo com calma para ver o que houve porque não funcionou. Vejamos:

    1) Quando enviei o arquivo dia 12/07/2017 a tabela T102_ConsumoXPagto estava conforme mostrado na imagem abaixo.
    PS: Observe o último registro marcado com fundo preto

    [Resolvido]Atualizar mais campos com Insert Into Fma_at10

    2) Após acrescentar sua última alteração a tabela T102_ConsumoXPagto (15/07/2017) ficou conforme a imagem a seguir:
    PS: Observe os 2 últimos registros marcados com fundo preto

    [Resolvido]Atualizar mais campos com Insert Into Fma_at11

    3) Resultados:
    a) Tabela T102_ConsumoXPagto: A rotina alterou/atualizou alguns campos (em vermelho) do último registro que já existia na tabela, conforme imagem mostrada acima da seguinte forma:
    • CodPagto = 64
    • IDConsumo = 2......... *** PS: incorreto, pois é outro 'CodConsumo' da tabela T10_Consumo
    • DataPagto = 12/07/2017
    IDOperadora = 1
    • IDBandeira = Nulo
    • ValorPagto = 0,00
    Taxa = 10
    • Prazo = 0

    • ValorTaxa = 0,00
    • DataAReceber = 12/07/2017
    • ValorAReceber = 0,00
    PagoSN = -1 (Sim)

    b) Tabela T102_ConsumoXPagto: Além de ter atualizado o registro citado no item “a”, a rotina incluiu mais um registro e atualizou apenas 02 campos de forma correta (em vermelho) desse novo registro, conforme imagem mostrada acima da seguinte forma:
    • CodPagto = 68
    • IDConsumo = 51
    DataPagto = 08/07/2017
    • IDOperadora = Nulo
    • IDBandeira = Nulo
    ValorPagto = 80,89
    • Taxa = 0
    • Prazo = 0
    • ValorTaxa = 0,00
    • DataAReceber = 12/07/2017
    • ValorAReceber = 0,00
    • PagoSN = Nulo

    c) Quando inclui um novo registro pelo Formulário “F10_Consumo” e atualiza o campo ‘TipoContabil’ igual a 1 e após a mensagem: ** ATENÇÃO: Lançamento feito com sucesso !:
    Observei que embora no momento em que é feito o lançamento esteja posicionado no último registro da tabela T10_Consumo, a rotina posiciona no 1º registro da tabela T10_Consumo, que é exatamente o registro alterado/atualizado citado na letra “a” acima, ou seja, está posicionando no 1º registro da tabela, e além disso incluindo um novo registro, conforme letra "b", e mesmo assim ambos de forma incorreta, pois a rotina deveria incluir um novo registro e atualizar nesse mesmo registro incluído os campos: Taxa, Prazo, ValorTaxa, DataAReceber e PagoSN, conforme já citado anteriormente.

    d) O lançamento correto após atualizar o  campo ‘TipoContabil’ igual a código 1: Criar um novo registro e fazer as atualizações, deve ficar assim:
    • CodPagto = 68  .............  * ou qualquer outro número gerado automaticamente pela autonumeração
    • IDConsumo = 51............. * Igual ao campo ‘CodConsumo’ devido ao Relacionamento 1-para-vários (Tabela: T10_Consumo)
    • DataPagto = 08/07/2017 ..* igual campo 'DataConsumo'  (Tabela: T10_Consumo)
    • IDOperadora = 1 .............* igual ao campo 'TipoContabil' (Tabela: T10_Consumo)
    • IDBandeira = Nulo .......... * Sem atualização
    • ValorPagto = R$ 80,89 .....* igual campo 'ValorAPagar' (Tabela: T10_Consumo)
    • Taxa = 10  ..................... * igual captura do campo: IDOperadora.Column(2)
    • Prazo = 0  .....................  * igual captura do campo: IDOperadora.Column(3)
    • ValorTaxa = R$ 8,09 ........ * igual ValorPagto * Taxa / 100
    • DataAReceber = 08/07/2017 * igual DataPagto + Prazo
    • ValorAReceber = R$ 72,80 .. * igual ValorPago - ValorTaxa
    • PagoSN = -1 (Sim) ............ * igual -1 (campo tipo sim/não)
     
    Importante: Ao criar esse novo registro no subformulário ‘F102_ConsumoXPagto’ (Tabela: T102_ConsumoXPagto) deve posicionar no mesmo registro em que foi feito o lançamento, ou seja, no registro atual que foi criado pela rotina dessa forma saberíamos se foi feito corretamente.

    Sei que muitas vezes é dificil compreender uma rotina que está apenas na cabeça de outra pessoa, e às vezes repassar isso para outra pessoa também fica um tanto dificil, pois é algo subjetivo, mas se não tiver entendido, tentarei explicar de outra forma.
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 19/7/2017, 03:55

    Olá


    Olhando suas imgs e lendo sua explicação, verifiquei o código e o que ocorre é o seguinte:

    Quando selecionamos na cxcombinação o tipoContábil = 1, seu código realiza procedimentos separados correto?

    Primeiramente ele registra os dados na tabela com esse comando

    CurrentDb.Execute "INSERT INTO T102_ConsumoXPagto (IDConsumo, DataPagto, ValorPagto, IDOperadora, Usuario, DataUsuario) " & _
                          "SELECT CodConsumo, DataConsumo, ValorAPagar, TipoContabil, Usuario, DataUsuario FROM T10_Consumo " & _
                          "WHERE CodConsumo=" & Me!CodConsumo & ";", dbFailOnError
             Me.Requery   'Atualização Global = SubFormulário após incluir Novo Registro

    Logo após, ele passa a informação para o subform e o objetivo e atualizar os dados do ultimo registro gravado.

    Observe, que teríamos mais de uma maneira de fazer isso. Poderíamos criar um procedimento para localizar na tabela o registro referente aquela venda registrada e atualizar com os dados do sub. Isso poderíamos fazer usando digamos, DoCmd.RunSQL "UPDATE.....

    Ocorre que, como no seu caso vc apenas deseja atualizar os dados do ultimo registro que é gravado no procedimento do seu código acima, basta informamos o sistema que a os valores alterados abaixo desse código serão atualizados no Ultimo registro salvo.

    Para esse feito, basta utilizarmos o comando:

    DoCmd.GoToRecord , , acLast

    antes do próximo procedimento que seria ler a condição criada para atualizar.

    Isso significa que antes de ler a condição e lançar os dados na tabela o sistema vai digamos que selecionar o último registro lançado na tabela e assim somente atualizar os campos.

    O código então deve ficar assim:

    [Resolvido]Atualizar mais campos com Insert Into Detalh10



    Uma dica: Limpe os registro salvos de todas as tabelas que são receptoras de dados das vendas, e ai teste tudo realizando umas 3 vendas desde o inicio.

    Teste e retorne ok.

    Abraços


    .................................................................................
    Phillip_Junior
    Analista de Sistemas
    avatar
    vileman
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 580
    Registrado : 25/05/2011

    [Resolvido]Atualizar mais campos com Insert Into Empty Atualizar mais campos com Insert Into

    Mensagem  vileman 19/7/2017, 13:29

    Bom dia, Phillip_Junior

    Funcionou na perfeição, além de eu ter aprendido mais ainda, você é o cara!!

    Valeu, muito obrigado.
    avatar
    Phillip_Junior
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 09/12/2016

    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Phillip_Junior 20/7/2017, 00:41

    Olá vileman


    Que bom que deu certo. Precisando estamos aqui.

    Uma boa dica a vc que está desenvolvendo um projeto que acaba tendo bastante direções no quesito financeiro, mapeie seu projeto de uma forma que daqui anos quando vc entrar nele vc saiba exatamente como tudo esta relacionado.
    Outra coisa é vc ler passo a passo o código de cada procedimento dentro do seu projeto, linha por linha, se preciso for faça escrevendo num papel ao seu entender e depois repasse isso na linguagem que o sistema irá entender.
    Isso ajuda a evitar erros tais como escrever o código trocando os lugares de cada procedimento.

    Abraços e sucesso ai com o projeto




    .................................................................................
    Phillip_Junior
    Analista de Sistemas

    Conteúdo patrocinado


    [Resolvido]Atualizar mais campos com Insert Into Empty Re: [Resolvido]Atualizar mais campos com Insert Into

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/3/2024, 10:27