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

    Adicionar registros em datas determinadas

    Compartilhe

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Sab 25 Jul 2015, 17:16

    Olá a todos,

    Consegui fazer um código para criar um número de registros específicos para datas semanais (de semana em semana), porém estou em dificuldades para conseguir o mesmo quando preciso criar registros de 2 em 2 semanas.
    Estou usando a função dateadd.

    Para registros semanal fiz o seguinte:
    Campos:
    TotalAulasAnual - número de aulas totais ao qual também será o mesmo número de registros a serem criados.
    DiaAula1 - data da primeira aula. Os registros devem ser criados a partir desta data, que devem ser distribuídos semanalmente ou de 2 em 2 semanas.
    AulasMensais - 4 (para registros semanais) ou 2 (para registros de 14 em 14 dias).

    Código:

    Dim db
    Dim ks
    Dim I As Integer

    Set db = CurrentDb()
    Set ks = db.OpenRecordset("TbSala1")
    For I = 1 To Me.TotalAulasAnual

    If Me.Sala = 1 And Me.AulasMensais = 4 Then
    ks.AddNew
    ks("Data") = DateAdd("ww", I - 1, Me.DiaAula1)
    ks("Hora") = Me.HoraAula1
    ks("Nome") = Me.Nome
    ks("Prf") = Me.Professor
    ks.Update

    Este código funciona perfeitamente para os devidos lançamentos nas datas especificada no cadastro, porém realmente não sei como fazer os lançamentos quando for este for para semana sim, semana não.


    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Adicionar registros em datas determinadas

    Mensagem  Alexandre Neves em Sab 25 Jul 2015, 19:59

    Boa tarde, e bem-vindo ao fórum
    Nomeie de forma normalizada. Data é palavra reservada de Access
    Dim db
    Dim ks
    Dim I As Integer

    Set db = CurrentDb()
    Set ks = db.OpenRecordset("TbSala1")
    For I = 1 To Me.TotalAulasAnual

    If Me.Sala = 1 And Me.AulasMensais = 2 Then
    ks.AddNew
    ks("Data") = DateAdd("ww", (I - 1)*2, Me.DiaAula1)
    ks("Hora") = Me.HoraAula1
    ks("Nome") = Me.Nome
    ks("Prf") = Me.Professor
    ks.Update


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Re: Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Dom 26 Jul 2015, 02:31

    Boa noite Alexandre!

    Muito obrigado pela ajuda, funcionou perfeitamente!
    No fim era uma questão de matemática fundamental, porém eu não utilizava os parênteses para "isolar" a questão.
    Foi um ótimo aprendizado!

    Estou tentando montar um cronograma do ano letivo da minha escola de música e me deparei com mais uma questão: temos férias coletivas no mês de janeiro e 1 semana na segunda semana de julho, seria possível fazer com que as aulas que seriam agendadas nestas datas serem "jogadas" para datas funcionais?

    Obrigado!

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Adicionar registros em datas determinadas

    Mensagem  Alexandre Neves em Dom 26 Jul 2015, 08:10

    Bom dia,
    Não entendi o que são datas funcionais. Veja como pode declarar essas datas em código


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Re: Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Dom 26 Jul 2015, 14:15

    Bom dia,
    Explicando melhor:

    Por exemplo, um cliente fecha um contrato com o período de 11 meses, sendo 42 aulas pertencentes à esse contrato.
    O total de aulas serão ministradas na disposição de uma vez por semana, com média de 4 aulas mensais.
    O sistema então irá lançar as 42 aulas a partir da data da primeira aula (até aí tudo bem), porém me deparei com a seguinte questão:
    A escola possui férias coletivas de uma semana, na segunda semana de julho e férias coletivas de 30 dias durante o mês de janeiro.

    Então caso um cliente faça a sua matrícula no mês de maio, fatalmente o sistema irá cadastrar aulas durante o período de férias!
    Há algum código ou função para que o sistema não cadastre os registros nas datas de férias?

    Obrigado.

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Adicionar registros em datas determinadas

    Mensagem  Alexandre Neves em Dom 26 Jul 2015, 15:34

    Faça a verificação dentro do ciclo
    Código:
    For I = 1 To Me.TotalAulasAnual
        If Me.Sala = 1 And Me.AulasMensais = 2 Then
            'verifica se é mês de Janeiro
            if Month(DateAdd("ww", (I - 1)*2, Me.DiaAula1))=1 then
                I=I-1
            else
                ks.AddNew
                ks("Data") = DateAdd("ww", (I - 1)*2, Me.DiaAula1)
                ks("Hora") = Me.HoraAula1
                ks("Nome") = Me.Nome
                ks("Prf") = Me.Professor
                ks.Update
            end if
    Fica a faltar a verificação da 2ª semana de Julho


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Re: Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Seg 27 Jul 2015, 21:37

    Olá Alexandre!
    Estou tendo inúmeros erros no código.
    Segue-se:

    Dim db
    Dim ks
    Dim I As Integer
    Set db = CurrentDb()
    Set ks = db.OpenRecordset("HistóricoAulas")
    For I = 1 To Me.TotalAulasAnual

    If Me.NumeroDeAula = 2 Then
    If Month(DateAdd("ww", (I - 1) * 2, Me.DiaAula1)) = 1 Then
    I = I - 1

    Else
    ks.AddNew
    ks("CadastroAlunos") = Me.Código
    ks("DiaAula") = DateAdd("ww", (I - 1) * 2, Me.DiaAula1)
    ks("Hora") = Me.HoraAula1
    ks("Nome") = Me.Nome
    ks("Prf") = Me.Professor
    ks("Sala") = Me.Sala
    ks("Data") = DateAdd("ww", (I - 1) * 2, Me.DiaAula1)
    ks.Update
    Next
    ks.Close
    db.Close
    End if
    End If

    Ele cria milhares de registros, e sinceramente não entendo o por quê.
    Apenas para salientar, preciso que os registros que seriam gerados para o mês de janeiro, sejam gerados para o mês seguinte (no caso fevereiro), pois em janeiro estaremos em férias coletivas.

    Digamos que você contrate 42 aulas na minha escola, sendo a matrícula no mês de novembro, preciso que o sistema distribua semanalmente os dias da sua aula e quando chegar em janeiro "pule" para fevereiro e continue a lançar até que o número total (42) seja atingido.

    Obrigado!
    Obs: Desculpe se eu estiver pedindo muito, estou dando o meu máximo para desenvolver esse sistema, estou varando noites inclusive e não estou conseguindo achar solução para isso.

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Adicionar registros em datas determinadas

    Mensagem  Alexandre Neves em Ter 28 Jul 2015, 13:07

    Boa tarde,
    Alterou o código que eu tinha sugerido
    O que significa "If Me.NumeroDeAula = 2 Then"?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Re: Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Ter 28 Jul 2015, 14:32

    Bom dia!

    Não houve alteração no código, apenas percebi que não haveria necessidade de uma condicional para as salas, pois posso filtrar através de uma consulta.
    Em relação ao outro campo "NumeroDeAula" apenas alterei o nome do campo "AulasMensais", pois notei que não seria correto chama-lo dessa forma.

    Ou seja, o código que passei contendo a condição "If" apenas serve para saber se as aulas serão distribuídas semanalmente ou a cada duas semanas (semanalmente caso o resultado seja 4, a cada duas semanas caso o resultado seja 2).

    Peço-lhe desculpas por não ter informado.

    Vc acha necessário enviar o banco de dados?

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Adicionar registros em datas determinadas

    Mensagem  Alexandre Neves em Ter 28 Jul 2015, 16:06

    Tente
    Código:
    For I = 1 To Me.TotalAulasAnual
        ProximaData = DateAdd("ww", (I - 1) * 2, Me.DiaAula1)
        'se é mês de Janeiro, aumenta 1 mês
        If Month(ProximaData) = 1 Then ProximaData = DateAdd("m", 1, ProximaData)
           
        If Me.NumeroDeAula = 2 Then
            ks.AddNew
            ks("Data") = ProximaData
            ks("Hora") = Me.HoraAula1
            ks("Nome") = Me.nome
            ks("Prf") = Me.Professor
            ks.Update
        End If


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Re: Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Sex 31 Jul 2015, 12:43

    Olá bom dia Alexandre!

    O código funcionou, porém o sistema estranhamente começa a salvar os registros em datas inconvenientes após o mês de janeiro (mês que é para ser pulado pelas férias).
    Enviei um print screen junto à essa mensagem para que percebas, note que após o mês de janeiro, o sistema passou a gerar registros nas terças e sextas.
    Notei que isso ocorreu por 4 vezes, e notei também que são 4 terças feiras no mês de janeiro a qual o sistema pulou.
    Será que o código "quis" compensar essas 4 aulas de janeiro no mês seguinte???
    Anexos
    Exemplo.docx
    Você não tem permissão para fazer download dos arquivos anexados.
    (178 Kb) Baixado 3 vez(es)

    Alesk_
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 25/07/2015

    Re: Adicionar registros em datas determinadas

    Mensagem  Alesk_ em Sex 31 Jul 2015, 12:48

    Explicação extra!!

    Eu entendi o código ao qual você me sugeriu e o adaptei também para os alunos semanais, criei assim o "ProximaData", e o "ProximaData2", o primeiro caso seja semanal e o segundo caso seja semana sim, semana não.
    O exemplo ao qual enviei, refere-se a um aluno cadastrado semanalmente, porém o "erro" também ocorre quando lançado semana sim, semana não.

    Obrigado!

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: Adicionar registros em datas determinadas

    Mensagem  Alexandre Neves em Sex 31 Jul 2015, 12:52

    Boa tarde,
    Veja se funciona como pretende
    Código:
    ProximaData = Me.DiaAula1
    For I = 1 To Me.TotalAulasAnual
        ProximaData = DateAdd("ww", (I - 1) * 2, ProximaData)
        'se é mês de Janeiro, aumenta 1 mês
        If Month(ProximaData) = 1 Then ProximaData = DateAdd("m", 1, ProximaData)
           
        If Me.NumeroDeAula = 2 Then
            ks.AddNew
            ks("Data") = ProximaData
            ks("Hora") = Me.HoraAula1
            ks("Nome") = Me.nome
            ks("Prf") = Me.Professor
            ks.Update
        End If


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: Dom 04 Dez 2016, 14:11