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]Loop somar datas e preencher registros usando

    Compartilhe

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Sex 09 Maio 2014, 13:53

    Dilson bom dia,

    Desculpe continuar a discussão, mas vi esse tópico, e acredito que com as alterações certas, ele pode solucionar o meu problema.

    Vou tentar te explicar o meu caso. Tenho vários registros em uma tabela, e nessa tabela tenho um campo DATA_PREVISTA, nessa data prevista tenho alguns registro que essa data já está preenchida, e tenho alguns registros que eu estão em branco para eu preencher futuramente, acontece que alguns registros dessa DATA_PREVISTA possuem registros referencias, no caso dois, que são o campo DIAS e o campo CodigoREF, bom, o campo dias, quando necessário ele é preenchido com um numero de dias, por ex. 10, e o CodigoREF é o mesmo código da chave primaria do registro de referencia.

    Vamos supor, no registro com chave primaria 1, minha DATA_PREVISTA está em branco, e no registro 2, a data também está em branco, mas o campo está preenchido com o número 10 e o CodigoREF está preenchido com o código da chave primaria do registro 1.

    Pois bem, com isso dessa forma, eu entro no meu formulário e escolho uma data para o registro 1, eu gostaria que automaticamente o formulário buscasse na minha tabela quando o CodigoREF for igual a algum registro da chave primaria, ele pegasse essa DATA_PREVISTA que eu escolhi, e somasse com o campo DIAS do meu segundo registro, nesse caso, e me mostrasse essa nova data no meu formulário, ou seja, a data que eu escolhi + 10 dias, e então deixasse gravado na tabela as duas data citadas nesse exemplo.

    Então diante do problema, eu estava observando o código que você postou para o amigo Rogerio, e acredito que com alguns ajustes ele pode ser funcional para o meu caso.

    Poderia me ajudar?

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Sex 09 Maio 2014, 14:45

    Olá pengo,

    Poderá haver mais de um registro com um mesmo registro referencial ?

    Esquema:

    RegistroDATA_PREVISTADIASCodigoREF
    109/05/2014
    2101
    351
    Na hipótese de um registro referecial, então a junção da data 09/05/2014 + 10 dias do registro 2 (com ref. 1) Resultado: o registro 1 ficaria = 19/05/2014. Seria isso ?  

    E se houver o registro 2 e 3 com dias para somar ? Como ficaria a data de 09/05/2014 ?

    Aguardo.

    Nota: Depois o tema desse assunto será separado para um novo tópico.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Sex 09 Maio 2014, 15:00

    Olá Dilson,

    Muito bom o seu exemplo, captou exatamente o que eu disse.

    Na hipótese de um registro referecial, então a junção da data 09/05/2014 + 10 dias do registro 2 (com ref. 1) Resultado: o registro 1 ficaria = 19/05/2014. Seria isso ?
    Exatamente isso.

    E se houver o registro 2 e 3 com dias para somar ? Como ficaria a data de 09/05/2014 ?
    Não entendi muito bem sua pergunta, mas por exemplo, como a data de 09/05/2014 foi o usuário que escolheu, e ela não tem registro referencial, ela não irá mudar, porém, seguindo o seu exemplo, no registro 3, também deveria ser gerado uma nova data, que no caso seria 09/05/2014 + 5 que seria 14/05/2014.

    Vamos supor que exista um quarto registro, e esteja preenchido o campo dias com o número 20, e o CodigoREF com o número 2, então ele teria que somar essa nova data gerada no campo 2 (19/05/2014) + o numero 20. ou seja, 08/06/2014.

    Seria possível?

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Sex 09 Maio 2014, 15:17

    No final das contas a tabela ficaria assim:

    RegistroDATA_PREVISTADIASCodigoREF
    109/05/2014
    219/05/2014101
    314/05/201451
    408/06/2014201

    Confirma ?

    Se for isso, será possível usando recordset.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Somar datas e preencher registros usando loop

    Mensagem  pengo em Sex 09 Maio 2014, 15:22

    Olá Dilson,

    Mas no caso, o CodigoREF do registro 4, seria 2.

    19/05/2014 + 20 = 08/06/2014

    No resto está tudo certo.

    RegistroDATA_PREVISTADIASCodigoREF
    109/05/2014
    219/05/2014101
    314/05/201451
    408/06/2014202


    Última edição por pengo em Sex 09 Maio 2014, 18:09, editado 1 vez(es)

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Sex 09 Maio 2014, 15:50

    Ok pengo, separado o tema e aberto esse tópico e vamos continuar daqui.

    Eu estou sem access aqui para tentar alguma coisa e, com isso, peço que aguarde.

    Enquanto isso fica na apreciação dos colegas. Se alguém tiver uma solução publica pra gente aí.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Sex 09 Maio 2014, 15:53

    Ok Dilson,

    Desde já muito obrigado, e vamos aguardar.

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Sab 10 Maio 2014, 14:48

    Antes faça uma cópia de segurança do seu banco de dados.
    Tente no evento após atualizar do campo DATA_PREVISTA:

    On Error GoTo TratareiErro
    Dim rSt As DAO.Recordset
    Dim nCod As Long
    Dim CodRef As Long
    Dim rData As Date
    Dim rDias As Integer
    nCod = Me.Registro
    rData = Me.DATA_PREVISTA
    Set rSt = CurrentDb.OpenRecordset("NomeDaSuaTabela")
    rSt.MoveLast
    rSt.MoveFirst
       Do While Not rSt.EOF
             rDias = Nz(rSt("DIAS"))
             CodRef = Nz(rSt("CodigoREF"))
             rSt.Edit
             If CodRef = nCod Then
                 rSt("DATA_PREVISTA") = rData + rDias
             End If
             rSt.Update
             rSt.MoveNext
       Loop
    rSt.Close

    MsgBox "Data Percorridas e preenchidas conforme o caso.", vbInformation, "Completado"

    Exit_TratareiErro:
    Exit Sub
    TratareiErro:
    MsgBox "Aconteceu falha neste processamento." _
          & vbCrLf & "Trata-se do erro n°: " & Err.Number _
          & vbCrLf & "Descrição: " _
          & Err.Description, vbInformation, "Erro inesperado"
    Exit Sub



    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Seg 12 Maio 2014, 16:22

    Bom dia Dilson,

    Primeiramente, desculpe a demora em lhe responder, neste fim de semana como era dia das mães, acabei indo viajar e não consegui mexer no BD.

    Bom, primeiro quero lhe agradecer por estar me ajudando.

    Tentei utilizar o exemplo que você me mandou, e o mesmo está funcionando muito bem parcialmente.

    Ele consegue fazer as alterações na primeira referencia que ele encontra, porém, se o BD possui referencias diferentes ele não continua com os cálculos.

    Para facilitar o entendimento, eu fiz um BD conforme o que estou precisando.

    Ele contém a tabela, e dois fomulários.

    Um formulário que seria para popular a tabela (Cadastro), e o formulário que contém o seu código, que seria um formulário que seria aberto para somente editar os dados já cadastrados, no caso, alterar somente a Data Prevista (Atualizar_Cadastro).

    Desde já agradeço a ajuda.
    Anexos
    Teste.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (70 Kb) Baixado 8 vez(es)

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Qua 14 Maio 2014, 12:34

    Não esqueça de fazer uma cópia de segurança do seu projeto.

    Em um módulo qualquer, salve esta função que fiz para popular essas datas:

    Public Function funcaoPopData()
    On Error GoTo TratareiErro
    Dim rSt As DAO.Recordset
    Dim CodRef As Long
    Dim rData As Date
    Dim rDias As Integer
    Dim strsql As String
    Dim tblTemp As String

    CurrentDb.Execute "SELECT Registro, DATA_PREVISTA INTO tblTemp FROM NomeDaSuaTabela;"

    Set rSt = CurrentDb.OpenRecordset("NomeDaSuaTabela")
    rSt.MoveLast
    rSt.MoveFirst
        Do While Not rSt.EOF
              rDias = Nz(rSt("DIAS"))
              CodRef = Nz(rSt("CodigoREF"))
              rData = Nz(DLookup("DATA_PREVISTA", "tblTemp", _
                                        "Registro =" & CodRef))
              rSt.Edit
              If CodRef > 0 And Not IsNull(rData) Then
                  rSt("DATA_PREVISTA") = rData + rDias
              End If
              rSt.Update
              rSt.MoveNext
        Loop
    rSt.Close

    CurrentDb.Execute "DROP TABLE tblTemp"

    MsgBox "Data Percorridas e preenchidas conforme o caso.", vbInformation, "Completado"

    Exit_TratareiErro:
    Exit Function
    TratareiErro:
    MsgBox "Aconteceu falha neste processamento." _
           & vbCrLf & "Trata-se do erro n°: " & Err.Number _
           & vbCrLf & "Descrição: " _
           & Err.Description, vbInformation, "Erro inesperado"
    Exit Function
    End Function


    Para chamá-la, coloque no evento ao apertar de um botão ou outro evento que desejar:
    Call funcaoPopData()


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Qua 14 Maio 2014, 13:31

    Bom dia Dilson,

    Quero te agradecer pela ajuda, e quero dizer que cada vez que você manda um código eu vibro aqui com o resultado, acho muito empolgante.

    Bom, mas esta quase perfeito, ele está com um problema aqui, que eu tentei entender, fiquei observando o seu código, mas ainda tenho serias limitações, e não consegui chegar a uma solução sozinho.

    Acontece que, quando eu seleciono uma data, a primeira vez, ele soma os outros campos, mas como eles se encontravam como Null parece que o access soma com a data inicial do sistema no ano de 1900, então as outras demais datas ficam com o ano de 1900, se eu for lá no mesmo campo que eu selecionei a data, e selecionar ela novamente, ele arruma a segunda data certinha, e assim sucessivamente, ou seja, se eu tiver 5 datas que serão calculadas com o seu código, eu tenho que selecionar a data que eu escolhi 5 vezes, para então ele calcular todos os campos corretamente.

    Acho que fica mais fácil de entender com o Banco de Dados em anexo.

    Pode me ajuda mais nessa?
    Anexos
    Teste.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (60 Kb) Baixado 10 vez(es)

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Sex 16 Maio 2014, 20:31

    Boa Tarde,

    Estou tentando encontrar um solução para o meu caso, e acabei encontrando uma que resolve o problema, mas mesmo assim eu ainda preciso de uma ajudinha.

    O que eu fiz: tirei a mensagem avisando que os registros foram alterados, e chamei no evento ao perder foco o modulo Call funcaoPopData(), só que eu adicionei essa linha umas 15 vezes (por isso que tirei a mensagem), ou seja, ai ele executa isso 15 vezes e preenche as linhas corretamente.

    Bom, com isso surge o meu problema, eu adicionei 15 vezes, porém na maioria das vezes eu prevejo, que não serão tantas linhas que ele terá que atualizar (para cada vez que eu adicionei, ele altera uma linha), porém pode ser que alguma vez tenha que ter mais de 15 linhas, então com isso eu queria uma solução.

    Eu pensei em resolver esse problema da seguinte forma, o meu formulário vai ir buscar os dados em uma consulta, e essa consulta vai possuir um número x de linhas, então teria como eu contar o número de linhas que minha consulta possui, e assim executar o modulo Call funcaoPopData() esse número x de vezes???

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Sex 16 Maio 2014, 20:59

    Olá,

    Cheguei a um resultado satisfatório, no entanto tenho que revisar alguns detalhes que ainda vem causando a data ano 1900 em algumas situações. Eu considerarei o uso da consulta ao invés de tabela temporária e vamos ver como se sairá.

    Se algum colega vislumbrar uma idéia para solucionar, posta pra nós aí.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  Dilson em Sab 17 Maio 2014, 08:09

    Olá,

    Encontrei saídas codificando no evento antes e após atualizar, no entanto geravam-se conflitos de gravação e só por isso, me auto desaconselhei a seguir nesta linha. Então fiz poucas modificações no código e o implementei no apertar de um botão, ou seja, escreve-se e modifica-se as datas que forem necessárias e depois aperta o botão que, por loop fará o auto preenchimento dinamicamente das datas referenciais. Funcionando perfeitamente sem erros e sem conflitos, mas, se ainda assim desejar usar esse código no evento após atualizar do campo DATA_PREVISTA, ele funcionará sem problemas, tendo que aceitar o inconveniente de confirmar o salvamento dos dados causado pelas mensagens de conflito de gravação.

     
    On Error GoTo TratareiErro
    Me.Recalc
    Dim rSt As DAO.Recordset
    Dim CodRef As Long
    Dim rData As Date
    Dim rDias As Integer
    Set rSt = CurrentDb.OpenRecordset("Cadastro")
    rSt.MoveLast
    rSt.MoveFirst
       Do While Not rSt.EOF
             rDias = Nz(rSt("DIAS"))
             CodRef = Nz(rSt("CodigoRef"))
             rData = Nz(DLookup("DATA_PREVISTA", "tblTemp", _
                                                        "Registro =" & CodRef))
             rSt.Edit
             If CodRef > 0 And rData <> "00:00:00" Then
                 rSt("DATA_PREVISTA") = rData + rDias
             End If
             rSt.Update
             rSt.MoveNext
       Loop
    rSt.Close
    Me.Requery
    Exit_TratareiErro:
    Exit Sub
    TratareiErro:
    MsgBox "Aconteceu falha neste processamento." _
          & vbCrLf & "Trata-se do erro n°: " & Err.Number _
          & vbCrLf & "Descrição: " _
          & Err.Description, vbInformation, "Erro inesperado"
    Exit Sub


    tblTemp refere-se o nome da consulta oriunda da tabela Cadastro.

    Bom trabalho e estudo.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    pengo
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 82
    Registrado : 10/12/2013

    Re: [Resolvido]Loop somar datas e preencher registros usando

    Mensagem  pengo em Seg 19 Maio 2014, 15:56

    Dilson,

    Muito Obrigado pela sua imensa ajuda, aqui no meu banco de dados ocorreu tudo perfeito, coloquei o código no evento ao perder foco, e ele alterou as demais datas sem apresentar nenhuma mensagem de conflito, retirei apena a instrução Me.Requery, pois com ela eu não conseguia ir para o próximo registro, e mesmo tirando ela, tudo funcionou perfeitamente, já fiz diversos testes e não ocorreu nenhum erro, caso aconteça alguma coisa eu reporto aqui novamente.

    Quero agradecer novamente a sua grande ajuda, a qual eu jamais teria dado conta de terminar o meu bd, ele não tem fins lucrativos é para uso próprio.

    Sou muito grato, e deixo aqui o Banco de Dados de exemplo para quem mais precisar de algo similar.

    Obrigado Dilson.

      Data/hora atual: Sab 10 Dez 2016, 04:52