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 definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Compartilhe

    Sennyor
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 02/07/2014

    [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Sennyor em Qui 11 Set 2014, 23:20

    Boa noite a todos!
    Para tirar minhas dúvidas sempre recorro a este fórum, que reputo ser o melhor de todos, mas, após muita procura não encontrei nada que resolvesse esse problema em particular.
    É o seguinte: Tenho um form e um subform contínuo com vários registros conforme o número de dias do mês.
    Existem vários campos, sendo um deles chamado "Diu".
    Preciso por um botão no form que ao ser clicado, altere os valores desse campo "Diu" para 10, por exemplo, em todos os registros do subform contínuo.
    Agradeço antecipadamente pela ajuda!

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Dilson em Sex 12 Set 2014, 02:57

    Olá seja bem vindo ao Fórum MaximoAccess !

    No evento ao clicar de um botão:


    Dim rs As Recordset
    Dim qRegistros As Long
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset("SuaTabela")
    rs.MoveLast
    rs.MoveFirst
    qRegistros = rs.RecordCount
      For i = 1 To qRegistros
         rs.Edit
         rs("Diu") = 10
         rs.Update
         rs.MoveNext
      Next i
    rs.Close



    .................................................................................
    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;

    Sennyor
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 02/07/2014

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Sennyor em Sex 12 Set 2014, 18:25

    Valeu Dilson!
    Seu código deu certinho, mas, ainda não atendeu o que eu queria.
    A culpa foi minha, pois, deixei de detalhar bem o que estou fazendo.
    É o seguinte: É um banco de dados de escala de trabalho.
    São duas tabelas, tabela1 e tabela2. Essas duas tabelas são relacionadas da seguinte forma:
    A tabela1 guarda alguns nomes de funcionários e para cada nome, na tabela2 fica a escala de 1 a 30 ou 31 depende do mês e cada funcionário tem uma escala diferente de horas diárias.
    Portanto, quando eu clicar no botão para preencher no campo "Diu" as horas diárias, apenas os registros daquele funcionário deveriam ser preenchidos.
    No caso do seu código, está sendo preenchido todos os campos da tabela referente a todos os funcionários cadastrados.
    Outra coisa, pretendo por no form uma textbox com o número de horas daquele funcionário que estiver sendo visualizado no momento.
    Simplificando talvez seja mais fácil de entender:
    Abro o formulário e aparece:
    João
    Ao lado está a textbox com o valor 10 e o botão.
    Abaixo o subform com registros de 1 a 30 no campo data e ao lado de cada dia o campo "Diu".
    Eu clico no botão no form e os campos "Diu" no subform, somente daquele funcionário são preenchidos com 10.

    Vou ao próximo registro, o do Pedro.
    Ao lado está a textbox com o valor 08 e o botão.
    Abaixo o subform com registros de 1 a 30 no campo data e ao lado de cada dia o campo "Diu".
    Eu clico no botão no form e os campos "Diu" no subform, somente daquele funcionário são preenchidos com 08.

    E assim por diante.

    Grato!

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Dilson em Sab 13 Set 2014, 00:46

    Imagino que no formulário você deva ter numa textbox o código do funcionário, que se propaga nos registros do subformulário (que relaciona os registros de cada um deles) e que tem uma textbox para digitar o valor que será acrescentado no campo Diu por loop.

    Faça:

    Dim rs As Recordset
    Dim qRegistros As Long
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM SuaTabela WHERE" _
                                  & " SuaChaveEstrangeiraFuncionario=" & Me!SuaTextCodigoDoFuncionario)
    rs.MoveLast
    rs.MoveFirst
    qRegistros = rs.RecordCount
      For i = 1 To qRegistros
         rs.Edit
         rs("Diu") = Me!SuaTextBoxValor
         rs.Update
         rs.MoveNext
      Next i
    rs.Close



    .................................................................................
    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;

    Sennyor
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 02/07/2014

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Sennyor em Sab 13 Set 2014, 01:52

    Muito obrigado Dilson pela sua atenção!
    Fiz como orientado, mas, esta dando a mensagem "Erro de tempo de execução '3021'" Nenhum registro atual.
    Quando clico em depurar aparece em amarelo a parte "rs.MoveLast"
    Att.

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Dilson em Sab 13 Set 2014, 02:25

    Isso tá acontecendo porque provavelmente não existe registros a percorrer.

    Poderíamos resolver declarando on error resume next no inicio do código, no entanto isso não é recomendado. Faça assim:

    no trecho coloque assim:

    qRegistros = rs.RecordCount
    If qRegistros > 0 Then
    rs.MoveLast
    rs.MoveFirst
    qRegistros = rs.RecordCount
    End If



    .................................................................................
    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;

    Sennyor
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 02/07/2014

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Sennyor em Sab 13 Set 2014, 02:47

    Não está funcionando. Simplesmente não preenche nada.
    Veja se eu modifiquei corretamente:

    Dim rs As Recordset
    Dim qRegistros As Long
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tabela2 WHERE" _
    & " SuaChaveEstrangeiraFuncionario=" & Me!SuaTextCodigoDoFuncionario)

    qRegistros = rs.RecordCount
    If qRegistros > 0 Then
    rs.MoveLast
    rs.MoveFirst
    qRegistros = rs.RecordCount
    End If
    For i = 1 To qRegistros
    rs.Edit
    rs("Diu") = Me!SuaTextBoxValor
    rs.Update
    rs.MoveNext
    Next i
    rs.Close

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Dilson em Sab 13 Set 2014, 02:54

    Deve substituir:

    SuaChaveEstrangeiraFuncionario pelo nome do campo código do funcionário

    SuaTextCodigoDoFuncionario pelo nome da textbox que tem o código do funcionário

    Me!SuaTextBoxValor pelo nome da textbox que preenche o valor.


    .................................................................................
    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;

    Sennyor
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 02/07/2014

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Sennyor em Sab 13 Set 2014, 19:15

    Bom dia Dilson!

    Quando eu fui mandar a última mensagem pra você, simplesmente copiei e colei como você havia me mandado.
    Eu realmente já havia feito essas mudanças e não funcionava, ou melhor, não é que não funcionava, depois eu vi que na tabela mudavam os valores, mas, no form aberto continuava do mesmo jeito, simplesmente porque não atualizava na hora, então eu coloquei no final do código "DoCmd.RefreshRecord".
    Não sei se pelas regras de programação é a melhor forma, mas funcionou. Se tiver uma sugestão melhor eu agradeço.
    Veja como ficou:

    Dim rs As Recordset
    Dim qRegistros As Long
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tabela2 WHERE" _
                                 & " codigofuncionarios=" & Me!txtcodigofuncionarios)

    qRegistros = rs.RecordCount
    If qRegistros > 0 Then
    rs.MoveLast
    rs.MoveFirst
    qRegistros = rs.RecordCount
    End If
     For i = 1 To qRegistros
        rs.Edit
        rs("Diu") = Me!txt01
        rs.Update
        rs.MoveNext
     Next i
    rs.Close
    DoCmd.RefreshRecord

    Sem querer abusar...

    Nesse mesmo código, se a escala fosse 12x36, ou seja dia sim dia não de trabalho, seria possível o preenchimento apenas dos dias pares ou os ímpares?

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Dilson em Dom 14 Set 2014, 17:03

    RefreshRecord está correto.
    Acrescente um controle ComboBox para informar "Par" ou "Impar".
    No código acrescentei duas variáveis:
    - qTipoDia para capturar "Par" ou "Impar"
    - qDia para a cada laço capturar a data

    Dim rs As Recordset
    Dim qRegistros As Long
    Dim qTipoDia As String
    Dim qDia As Date
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM SuaTabela WHERE" _
    & " ChaveEstrangeiraFuncionario=" & Me!TextCodigoDoFuncionario)
    qRegistros = rs.RecordCount
    If qRegistros > 0 Then
    rs.MoveLast
    rs.MoveFirst
    qRegistros = rs.RecordCount
    qTipoDia = Me.SuaComboBoxTipoDeDia
    End If
    For i = 1 To qRegistros
    qDia = rs("SeuCampoData")
    rs.Edit
    If qTipoDia = "Par" Then
    If (Day(qDia) Mod 2) = 0 Then
    rs("Diu") = Me!qValor
    End If
    ElseIf qTipoDia = "Impar" Then
    If (Day(qDia) Mod 2) <> 0 Then
    rs("Diu") = Me!qValor
    End If
    End If
    rs.Update
    rs.MoveNext
    Next i
    rs.Close


    Não esqueça de marcar o Resolvido.


    .................................................................................
    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;

    Sennyor
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 21
    Registrado : 02/07/2014

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Sennyor em Dom 14 Set 2014, 19:06

    Grande Dilson!
    Desculpe ter abusado da sua paciência.
    Ficou show de bola!
    Ainda preciso incrementar meu projeto com outras funcionalidades.
    Mas, essa etapa vamos deixar para uma próxima vez.
    Se não der conta do recado eu volto!
    Muito obrigado mesmo! Very Happy Very Happy Very Happy Very Happy

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Loop definir valores em todos os registros do subform contínuo (inserindo em data normal, par ou impar)

    Mensagem  Dilson em Seg 15 Set 2014, 03:21

    Agradecemos o feedBack da solução.

    Abraço!


    .................................................................................
    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;

      Data/hora atual: Qua 07 Dez 2016, 18:18