locked
Dúvida contagem do total de registros em subformulários aninhados dentro de um formulário principal RRS feed

  • Pergunta

  • Bom dia,

    tenho um formulário o qual possui três subformulários aninhados, um dentro do outro. Estes subformulários estão nomeados como SubForm1, SubForm2 e  SubForm3.

    Dentro de cada subformulário há um campo, nomeado como Contagem, o qual exibe o valor do registro atual e o total de registros. No evento Current de cada um dos subformulários há o seguinte código:

    Contagem = [CurrentRecord] & " de " & RecordsetClone.RecordCount

    Então quando avançamos ou retrocedemos pelos registros de cada subformulário, o campo Contagem vai exibindo os valores, exemplo "2 de 8", "3 de 8" etc.
    Porém, toda vez que os subformulários são atualizados, após termos mudado de registro no formulário principal, o valor do campo Contagem não exibe adequadamente o total de registros. É exibido o valor  "1 de 1", mesmo que haja mais registros dentro daquele subformulário. O valor volta a ficar correto quando avanço pelos registros do subformulário, aí então o campo Contagem volta a exibir o total de regitros.
    Para contornar esta situação, criei o código abaixo, o qual é executado quando nos movimentamos pelos registros do formulário principal. A intenção é que cada um dos subformulários receba o foco, vá para o último registro, e retorne para o primeiro.


    SubForm1.SetFocus
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToRecord , , acFirst

    SubForm1!SubForm2!.SetFocus
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToRecord , , acFirst

    SubForm1!SubForm2!SubForm3.SetFocus
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToRecord , , acFirst

    Mas está funcionando parcialmente e não consigo entender o que há de errado. O campo Contagem do SubForm1 passa a exibir o seu total de registros, o campo Contagem do Subform3 também, mas o campo Contagem do SubForm2 continua exibindo "1 de 1", mesmo tendo mais do que 1 registro.

    E o engraçado é que se eu deixar o código como o mostrado a seguir, sem fazer referência ao SubForm3...

    SubForm1.SetFocus
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToRecord , , acFirst

    SubForm1!SubForm2!.SetFocus
    DoCmd.GoToRecord , , acLast
    DoCmd.GoToRecord , , acFirst

    ...mesmo assim o SubForm3 atualiza corretamente o valor do campo Contagem, e o SubForm2 não.

    Caso alguém tenha uma outra sugestão para exibir o total de registros, agradeço

    quinta-feira, 12 de março de 2009 12:49

Respostas

  • Olá,

    faça o MoveLast do RecordsetClone, não do formulário.


    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    • Marcado como Resposta BladeRunner2019 sexta-feira, 13 de março de 2009 16:36
    sexta-feira, 13 de março de 2009 01:49
    Moderador

Todas as Respostas

  • Olá,

    faça o MoveLast do RecordsetClone, não do formulário.


    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    • Marcado como Resposta BladeRunner2019 sexta-feira, 13 de março de 2009 16:36
    sexta-feira, 13 de março de 2009 01:49
    Moderador
  • Perfeito Luiz!!!!   Valeu mesmo!!  Ficou excelente

    Apenos alerto quem copiar este código para não esquecer de colocar a tratativa de erro, pois sem ele ocorrerá um erro quando mover para um novo registro, ou para um registro já existente mas que possua um subformulário sem informação.

    ficou assim, coloquei este código em cada um dos subformulários.

    Private Sub Form_Current()
    On Error GoTo Err_Form

    RecordsetClone.MoveLast
    If NomeDeAlgumCampoQualquer <> "" Then
        Contagem = [CurrentRecord] & "/" & RecordsetClone.RecordCount
    Else
        Contagem = [CurrentRecord] & "/" & RecordsetClone.RecordCount + 1
    End If

      
    Exit_Form:
        Exit Sub

    Err_Form:
        'MsgBox Err.Description
        Resume Exit_Form

    End Sub

    sexta-feira, 13 de março de 2009 16:36