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


2 participantes

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

    avatar
    Sennyor
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Sennyor 11/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 12/9/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

    avatar
    Sennyor
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Sennyor 12/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 13/9/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

    avatar
    Sennyor
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Sennyor 13/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 13/9/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

    avatar
    Sennyor
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Sennyor 13/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 13/9/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.
    avatar
    Sennyor
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Sennyor 13/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 14/9/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.
    avatar
    Sennyor
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Sennyor 14/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 15/9/2014, 03:21

    Agradecemos o feedBack da solução.

    Abraço!

    Conteúdo patrocinado


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

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/3/2024, 20:51