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
Soma contínua em consultas, com eficiência

Adquira a assinatura vitalícia do site e passe a ter acesso aos arquivos exemplos, vídeos, revistas, livros e ao kit de montagem de ribbons. Você terá suporte por e-mail, caso necessite tirar dúvidas pontuais. Clique AQUI e veja como obter um dos nossos planos. Clique AQUI e faça uma visita a seção Downloads do site e verifique as centenas de arquivos que estará à sua disposição. Clique AQUI e faça uma visita a seção Vídeos do site e veja a lista que estará disponível ao se tornar o nosso assinante vitalício. Clique AQUI e saiba mais detalhes sobre o kit de montagem de ribbons (deixe seus aplicativos com aspecto profissional).



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)

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

Parabéns! Muito criativa a técnica!

silvio   20/02/2017 15:41:36

Mais uma técnica. Parabéns Avelino Sampaio


Envie seu comentário: