... Pague apenas R$47,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Soma contínua em consultas, com eficiência

Apresento mais uma consulta, objeto da minha crítica, tal como justifiquei nesta dica AQUI sobre numeração.

SELECT IdMovimento, DataMovimento, Credito, Debito, 
DSum("[Credito] - [Debito]","tblMovimento","idMovimento <= " & [idMovimento]) AS Saldo
FROM [tblMovimento];

Para nos livramos desse desastre de consulta, iremos utilizar a mesma técnica empregada na dica sobre numeração, que é a de utilizar a consulta espelho e um pouco de programação.  Observe a consulta exemplo abaixo:

SELECT *, fncSomarConsulta([CampoValor]) As Acumulado FROM NomeTabela;

A função utilizada na consulta é a seguinte:

Public Function fncSomarConsulta(varValor) As Double
Static n As Double
If IsNull(varValor) Then
   n = 0
   Exit Function
End If
n = n + varValor
fncSomarConsulta = n
End Function

Observe a consulta espelho, utilizada para zerar o valor da variável n:

SELECT *, fncSomarConsulta(null) As Acumulado FROM NomeTabela WHERE 1=0;

Esse valor null na função, força o código a passar pela parte vermelha, zerando assim, o valor de n.

Public Function fncSomarConsulta(varValor) As Double
Static n As Double
If IsNull(varValor) Then
   n = 0
   Exit Function
End If
n = n + varValor
fncSomarConsulta = n
End Function

Agora vamos unir as consultas para obter o resultado desejado:

SELECT *, fncSomarConsulta(null) As Acumulado FROM NomeTabela WHERE 1=0
UNION ALL
SELECT *, fncSomarConsulta([CampoValor]) As Acumulado FROM NomeTabela;

A primeira consulta zera a variável n e a segunda consulta apresenta os dados e a devida soma acumulada.

Baixe o Arquivo da dica 86 e rode a consulta qrySomar e veja o resultado no campo Acumulado.  Abra a consulta no modo estrutura e veja como foi montada.

Nota 1: A consulta União nos traz um problema que é o da impossibilidade de editar os dados.

Nota 2: Só utilize a técnica aqui apresentada se for estritamente necessário realizar a soma acumulada na consulta.

Para obter saldo linha a linha, estude as técnicas aplicadas neste meu artigo:

Bom estudo!


 

 


1 comentário(s)

silvio   20/02/2017 15:41:36

Mais uma técnica. Parabéns Avelino Sampaio


Envie seu comentário: