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]Gravar o mesmo registro várias vezes

    Compartilhe

    rnpala
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 02/12/2015

    [Resolvido]Gravar o mesmo registro várias vezes

    Mensagem  rnpala em Qua 02 Dez 2015, 22:24

    Pessoal, boa noite!
    Esse é meu primeiro post aqui e gostaria de pedir ajuda de vocês em um problema que estou tendo ao tentar fazer uma macro no Access.

    Tenho um Access que serve para "Controle Financeiro Familiar", onde tenho as seguintes tabelas:
    - CATEGORIA (Tabela para armazenar as categorias de despesa/receita da movimentação)
    - FONTE_MOVIMENTACAO (tabela para informar qual conta saiu/entrou o dinheiro da movimentação)
    - FORMA_PAGAMENTO (tabela para registrar qual forma a movimentação foi paga)
    - MOVIMENTACAO (tabela para armazenar cada movimentação)
    - RESPONSAVEL_MOVIMENTACAO (tabela para armazenar a pessoa responsável pela movimentação)
    - SUBCATEGORIA (tabela para armazenar a subcategoria da movimentação)

    Cada movimentação (receita/despesa) eu vou registrar no formulário "Movimentação".
    O meu problema é relacionado as compras parceladas...
    Um dos atributos da tabela "Movimentação" é "Qnt_Parcelas", que serve para informar no frm_Movimentacao a quantidade de parcelas que a compra foi dividida.

    Criei uma variável chama novoValor e novaData. O "novoValor"="ValorMovimentacao"/"QntParcelas" e "novaData"="data"+30.
    Ou seja, vou dividir o valor da movimentação pela qnt de parcelas para achar quanto será cada parcela e novaData será a data atual + 30, para registrar a data referente a parcela de cada um dos meses que virão.

    A macro abaixo serve para ao clicar em salvar, registrar um registro para cada uma das parcelas, entrando no loop a quantidade de parcelas da movimentação, gravando o valor de cada parcela. Está funcionando quase perfeito, masssss.....

    Meu problema é que primeiro está registrando o valor inteiro com a data que registro, depois ele grava um registro na tabela para cada parcela, de forma correta (tanto o novoValor quanto a data incrementada de 30).

    Enfim, se puderem me ajudar, gostaria apenas de fazer com que o primeiro registro não seja armazenada (com o valor inteiro da movimentação).

    Exemplo:
    Considerando uma movimentação de R$ 800,00 que foi parcelada em 2x.

    Registro 1 - Valor 800,00 - Data 01/12/15 -> esse registro que precisa ser removido
    Registro 2 - valor 400,00 - data 01/01/16 -> registro correto da parcela 1
    Registro 3 - valor 400,00 - data 01/02/16 -> registro correto da parcela 2

    Desde já agradeço a disponibilidade e ajuda de todos!


    Macro:

    Private Sub bt_salvarRegistro_Click()

    Dim novoValor As Double
    Dim novaData As Date
    Dim contador As Integer

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb()
    Set rs = db.OpenRecordset("MOVIMENTACAO")

    rs.MoveFirst

       If Me.qntParcelas.Value > 1 Then
       
           contador = 0
           novaData = Me.data.Value - 30
           novoValor = Me.valor.Value / Me.qntParcelas.Value
           
           Do While contador < Me.qntParcelas.Value
           
               novaData = novaData + 30
               contador = contador + 1
               rs.AddNew
               rs.Fields("subCategoria") = Me.subCategoria
               rs.Fields("descricao") = Me.descricao
               rs.Fields("data") = novaData
               rs.Fields("valor") = novoValor
               rs.Fields("tipoMovimentacao") = Me.tipoMovimentacao
               rs.Fields("formaPagamento") = Me.formaPagamento
               rs.Fields("fonteMovimentacao") = Me.fonteMovimentacao
               rs.Fields("qntParcelas") = Me.qntParcelas
               rs.Fields("responsavelMovimentacao") = Me.responsavelMovimentacao
               rs.Fields("planejada") = Me.planejada
               rs.Update
               rs.MoveNext
               
           Loop
               
       End If
       
       DoCmd.GoToRecord acForm, "MOVIMENTACAO", acNewRec

    End Sub

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: [Resolvido]Gravar o mesmo registro várias vezes

    Mensagem  JPaulo em Sex 04 Dez 2015, 10:25

    Ola e seja bem vindo ao forum;

    Substitua todo o seu código por este, teste e retorne por favor;

    Código:
    Private Sub bt_salvarRegistro_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim I As Byte

    Set db = CurrentDb()
    Set rs = db.OpenRecordset("MOVIMENTACAO")

    If Me.qntParcelas.Value > 1 Then

    For I = 1 To Nz(Me.qntParcelas, 0)
    With rs
        .AddNew
      
               .AddNew
                !subCategoria = Me.subCategoria
                !descricao = Me.descricao
                !data = DateAdd("m", I - 1, (Me.data + 30))
                !valor = Nz(Me.valor.Value, 0) / Nz(Me.qntParcelas.Value, 0)
                !tipoMovimentacao = Me.tipoMovimentacao
                !formaPagamento = Me.formaPagamento
                !fonteMovimentacao = Me.fonteMovimentacao
                !qntParcelas = Me.qntParcelas
                !responsavelMovimentacao = Me.responsavelMovimentacao
                !planejada = Me.planejada
        .Update
    End With
    Next
    Else
        Exit Sub
       End If
       DoCmd.SetWarnings False
       DoCmd.RunCommand acCmdDeleteRecord
       DoCmd.SetWarnings True
       DoCmd.GoToRecord acForm, "MOVIMENTACAO", acNewRec
    rs.Close
    Set rs = Nothing
    End Sub


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    rnpala
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 02/12/2015

    Funcionou perfeitamente!

    Mensagem  rnpala em Sex 04 Dez 2015, 21:53

    Paulo, funcionou perfeitamento cara!
    Muito obrigado de verdade...
    Tinha pesquisado bastante e não tinha conseguido de jeito nenhum, brigadão!

    Se não for abusar muito, poderia te pedir apenas para explicar rapidamente só alguns trechos do seu código, p q na próxima consiga fazer!
    hahaha


    1. Nz(Me.qntParcelas, 0)

    2. um .addnew dentro do outro

    3. DateAdd("m", I - 1, (Me.data + 30))

    4. DoCmd.SetWarnings False
      DoCmd.RunCommand acCmdDeleteRecord
      DoCmd.SetWarnings True

    5. Set rs = Nothing

    De qualquer forma muito obrigado!

    Abraço

      Data/hora atual: Sex 09 Dez 2016, 07:39