Inquiridor
Select valor acumulando por data de pagto

Pergunta
-
No código abaixo eu consigo o retorno do saldo acumulado, porém de acordo com a ordem dos lançamentos.
Na verdade o que eu gostaria é de ter o saldo acumulado conforme a data de pagamento.
Alguém poderia orientar algo?
Meu Sistema Operacional é 64 bits e estou usando o Visual Studio.
O objetivo é carregar um ASP:GridView com a configuração de um AccessDataSource.
Utilizo para conexão Provider=Microsoft.Jet.OLEDB.4.0;Data Source.
SELECTA.cod_Lancamento AS ID,B.conta,A.data_Lancamento,A.debito,A.credito,Format(Nz([A.credito],0)-Nz([A.debito],0),"Currency") AS Saldo,Format(DSum("[Saldo]","Consulta_Saldo_Demonstrativo","[ID]<=" & [ID] & " and B.conta = '" & [B].[conta] & "'"),"Currency") AS SaldoAcumulado
FROM tb_Finan_Lancamentos AS A, tb_Finan_Origem AS B
WHERE (((A.cod_Origem)=[B].[cod_Origem]));As tabelas são as seguintes:tb_Finan_Lancamentos: cod_LancamentoId_PlanoContascod_Origemdata_Lancamentodata_PagtodebitocreditoId_destinohistoricotb_Finan_Origem: ID_Origemcod_OrigemcontaId_PlanoContastb_Finan_PlanoContas: ID_PlanoContasplanoContas
Todas as Respostas
-
-
Grande Danimar,
obrigado pelo retorno. Estou me batendo com o comando, não sei se compreendi, mas considerei o Sum(saldo) como já existente no comando "Format(DSum("[Saldo]",....", então eu substitui o "A.cod_Lancamento" por "A.data_Pagto" e inclui GROUP BY A.data_Pagto. Com isto aparece uma mensagem "voce tentou executar uma consulta que não inclui a expressão especificada "conta" como parte de uma expressão de agregação". Com isto, eu inclui no GROUP BY seguinte campos: A.data_Pagto, B.conta,A.debito, A.credito. Desta forma, o campo Saldo acumulado esperado retorna vazio.
SELECT A.data_Pagto AS ID, B.conta, A.data_Pagto, A.debito, A.credito, [A.credito]-[A.debito] AS Saldo, Format(DSum("[Saldo]","Consulta_Saldo_Demonstrativo","[ID]<=" & [ID] & " and B.conta = '" & [B].[conta] & "'"),"Currency") AS SaldoAcumulado
FROM tb_Finan_Lancamentos AS A, tb_Finan_Origem AS B
WHERE (((A.cod_Origem)=[B].[cod_Origem]))
GROUP BY A.data_Pagto, B.conta,A.debito, A.credito; -
Primeiro tente fazer a consulta direto no banco de dados para ver se funciona certo.
Depois você coloca no seu programa. Veja nesse link como utilizar o group by para totalizar resultados.
-
Bons exemplos Danimar, só não encontrei uma sintaxe semelhante ao saldoAcumulado. Eu tentei com o código abaixo, mas está com erro na sintaxe do Format(Sum...
SELECT A.data_Pagto,B.conta,A.debito,A.credito,A.credito-A.debito AS Saldo, Format(Sum"[Saldo]","Consulta_Saldo_Demonstrativo_Teste","B.conta='"&[B].[conta]&"'") AS SaldoAcumulado
FROM tb_Finan_Lancamentos AS A, tb_Finan_Origem AS B
WHERE (((A.cod_Origem)=[B].[cod_Origem]))
GROUP BY A.data_Pagto,B.conta,A.credito,A.debito; -
Onde você viu algo parecido com isso?
Format(Sum"[Saldo]","Consulta_Saldo_Demonstrativo_Teste","B.conta='"&[B].[conta]&"'") AS SaldoAcumulado
Isso não me parece com nenhum comando Sql. Tente fazer a forma simples
Sum(Saldo) as SaldoAcumulado.
-
Danimar, agradeço muito o teu retorno.
Eu encontrei algo de inspiração com Dsum nos endereços abaixo:
http://www.pcreview.co.uk/forums/dsum-date-criteria-t3984785.html
http://www.utteraccess.com/forum/Dsum-Criteria-Date-Month-t1960273.html
http://comunidade.itlab.com.br/eve/forums/a/tpc/f/273606921/m/3311019291Com o código abaixo eu consegui o retorno do saldoAcumulado, exceto em uma situação que envolve a expressão "A.data_Pagto <=#"&A.data_Pagto&"#", que é o retorno do primeiro saldo acumulado que fica com o campo vazio, pois não tem data anterior para o cálculo, então preciso resolver isto....
SELECT A.data_Pagto, B.conta, A.debito, A.credito, Nz(Format([A.credito]-[A.debito],"Currency"),0) AS Saldo, Nz(Format(DSum("[Saldo]","Consulta_Saldo_Demonstrativo_Teste","A.data_Pagto <=#"&A.data_Pagto&"# and B.conta = '" & [B].[conta] & "'"),"Currency"),0) AS SaldoAcumulado
FROM tb_Finan_Lancamentos AS A, tb_Finan_Origem AS B
WHERE (((A.cod_Origem)=[B].[cod_Origem]))
ORDER BY A.data_Pagto; -
-
Valeu Danimar, de qualquer forma muito obrigado e aguardando...abaixo tenho uma outra referencia:
http://office.microsoft.com/en-us/access-help/dsum-function-HA001228829.aspx
-
Olá Danimar,
acertei o código e está 100% no access, conforme abaixo:
SELECT A.data_Pagto, B.conta, A.debito, A.credito, Nz(Format([A.credito]-[A.debito],"Currency"),0) AS Saldo, Nz(Format(DSum("[Saldo]","Consulta_Saldo_Demonstrativo","Day([A.data_Pagto]) <= '" & Day([A.data_Pagto]) & "' and Month([A.data_Pagto]) <= '" & Month([A.data_Pagto]) & "' and Year([A.data_Pagto]) <= '" & Year([A.data_Pagto]) & "' and B.conta = '" & [B].[conta] & "'"),"Currency"),0) AS SaldoAcumulado
FROM tb_Finan_Lancamentos AS A, tb_Finan_Origem AS B
WHERE (((A.cod_Origem)=[B].[cod_Origem]))
ORDER BY A.data_Pagto;O meu objetivo é ter esse retorno em um GridView, eu havia pensado que com este código poderia configurar uma Data Source - Access Data Source, mas nada feito, ao fazer o test query retorna com uma mensagem de que a função Nz é indefinida na expressão.
-
Veja a ultima resposta do post, lá tem a resposta.
http://www.access-programmers.co.uk/forums/showthread.php?t=12538
-
Olá Danimar,
não sei se compreendi, mas tentei mudando Nz na consulta saldo e excluindo na SaldoAcumulado, mas continua a mensagem de Nz Indefinida da expressão:
SELECT
A.data_Pagto,
B.conta,
A.debito,
A.credito,
Format(Nz(A.credito,0)-Nz(A.debito,0),"Currency") AS Saldo,
Format(DSum("[Saldo]","Consulta_Saldo_Demonstrativo","Day([A.data_Pagto]) <= '" & Day([A.data_Pagto]) & "' and Month([A.data_Pagto]) <= '" & Month([A.data_Pagto]) & "' and Year([A.data_Pagto]) <= '" & Year([A.data_Pagto]) & "' and B.conta = '" & [B].[conta] & "'"),"Currency") AS SaldoAcumulado
FROM tb_Finan_Lancamentos AS A, tb_Finan_Origem AS B
WHERE (((A.cod_Origem)=[B].[cod_Origem]))
ORDER BY A.data_Pagto