bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Soma contínua em consultas, com eficiência

... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Soma contínua em consultas, com eficiência

Antes de iniciar sua leitura, clique aqui e cadastre-se para receber comunicados sobre novos artigos.

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!


 

 


2 comentário(s)

silvio   20/02/2017 15:41:36

Mais uma técnica. Parabéns Avelino Sampaio

Willian Rodrigues   13/08/2018 09:21:05

Parabéns! Muito criativa a técnica!


Envie seu comentário: