Olá Pessoal
Situação:
- Tenho um formulário onde filtro os registros diretamente sobre os campos (com botão direito do mouse sobre os caampos do form).
- Uma vez filtrados os registros, desejo marcá-los para uso posterior. Para isso, no cabeçalho, tenho um controle que aciona uma procedure que permite atualizar todos os registros já filtrados.
- Para isso uso a propriedade "RecordsetClone", pois ela "enxerga" os registros filtrados, não importanto quantos e quais filtros eu já tenha aplicado. Para isso, no código da Procedure, uso os comandos "for" e "next", que vão atualizando os registros do "recordsetclone". Até ai ok. funciona.
Código:
Dim formRecords As DAO.Recordset
Dim i As Long
Set formRecords = Me.RecordsetClone
If Me.SelLoteEmExib = True Then 'se seleção ativa
' Vai para o primeiro reg do recordset.
formRecords.MoveFirst
For i = 1 To QtdeRegs
formRecords.Edit
formRecords.Fields("LançMarc") = True
formRecords.Update
formRecords.MoveNext
Next i
Else
' Vai para o primeiro reg do recordset.
formRecords.MoveFirst
For i = 1 To QtdeRegs
formRecords.Edit
formRecords.Fields("LançMarc") = False
formRecords.Update
formRecords.MoveNext
Next i
End If
Problema:
- Porém noto que a rotina demora muito.
- Resolvi antão tentar alterar esses registros usando SQL no código VBA.
Dúvida:
- Gostaria de saber se alguém já conseguiu atualizar registros (já filtrados no form) usando instruções SQL ("DoCmd.RunSQL") que consigam "enxergar" a condição de filtro atual do formulário no instante que rodamos o SQL.
- Tentei compor a instrução SQL no VBA dicamicamente "colando" a cláusula WHERE do SQL com a propriedade "filter" do formulário, mas não funcionou, pois essa propriedade (filter) tras os filtros referenciando o nome dos controles do formulário, e não os nomes de campos da tabela do form (e o SQL parece só aceitar WHERE com nomes dos campos da tabela)
- Alguém sabe como atuar com SQL somente sobre os registros já filtrados? Acho que usando SQL terei mais rapidez.
Grato
Ambiente:
- Office Access 2013
- Windows 10
Situação:
- Tenho um formulário onde filtro os registros diretamente sobre os campos (com botão direito do mouse sobre os caampos do form).
- Uma vez filtrados os registros, desejo marcá-los para uso posterior. Para isso, no cabeçalho, tenho um controle que aciona uma procedure que permite atualizar todos os registros já filtrados.
- Para isso uso a propriedade "RecordsetClone", pois ela "enxerga" os registros filtrados, não importanto quantos e quais filtros eu já tenha aplicado. Para isso, no código da Procedure, uso os comandos "for" e "next", que vão atualizando os registros do "recordsetclone". Até ai ok. funciona.
Código:
Dim formRecords As DAO.Recordset
Dim i As Long
Set formRecords = Me.RecordsetClone
If Me.SelLoteEmExib = True Then 'se seleção ativa
' Vai para o primeiro reg do recordset.
formRecords.MoveFirst
For i = 1 To QtdeRegs
formRecords.Edit
formRecords.Fields("LançMarc") = True
formRecords.Update
formRecords.MoveNext
Next i
Else
' Vai para o primeiro reg do recordset.
formRecords.MoveFirst
For i = 1 To QtdeRegs
formRecords.Edit
formRecords.Fields("LançMarc") = False
formRecords.Update
formRecords.MoveNext
Next i
End If
Problema:
- Porém noto que a rotina demora muito.
- Resolvi antão tentar alterar esses registros usando SQL no código VBA.
Dúvida:
- Gostaria de saber se alguém já conseguiu atualizar registros (já filtrados no form) usando instruções SQL ("DoCmd.RunSQL") que consigam "enxergar" a condição de filtro atual do formulário no instante que rodamos o SQL.
- Tentei compor a instrução SQL no VBA dicamicamente "colando" a cláusula WHERE do SQL com a propriedade "filter" do formulário, mas não funcionou, pois essa propriedade (filter) tras os filtros referenciando o nome dos controles do formulário, e não os nomes de campos da tabela do form (e o SQL parece só aceitar WHERE com nomes dos campos da tabela)
- Alguém sabe como atuar com SQL somente sobre os registros já filtrados? Acho que usando SQL terei mais rapidez.
Grato
Ambiente:
- Office Access 2013
- Windows 10