none
Select valor acumulando por data de pagto RRS feed

  • 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.

    SELECT
    A.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_Lancamento
                                          Id_PlanoContas
                                          cod_Origem
                                          data_Lancamento
                                          data_Pagto
                                          debito
                                          credito
                                          Id_destino
                                          historico
    tb_Finan_Origem: ID_Origem
                                 cod_Origem
                                 conta
                                 Id_PlanoContas
    tb_Finan_PlanoContas: ID_PlanoContas
                                      planoContas
    terça-feira, 6 de novembro de 2012 17:59

Todas as Respostas

  • "Na verdade o que eu gostaria é de ter o saldo acumulado conforme a data de pagamento."

    Só fazer um Sum(Saldo) + GroupBy DataPagamento

    terça-feira, 6 de novembro de 2012 21:10
  • 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;

    quarta-feira, 7 de novembro de 2012 12:05
  • 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.

    http://www.devmedia.com.br/exemplos-com-group-by-e-com-a-clausula-having-totalizando-dados-sql-server-2008-parte-2/19839

    quarta-feira, 7 de novembro de 2012 13:20
  • 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;

    quinta-feira, 8 de novembro de 2012 13:51
  • 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.

    quinta-feira, 8 de novembro de 2012 19:40
  • 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/3311019291

    Com 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;

    quinta-feira, 8 de novembro de 2012 21:58
  • Então, nunca usei esse DSum. Não sei para que serve, talvez outro consiga te ajudar.

    quinta-feira, 8 de novembro de 2012 23:20
  • 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

    sexta-feira, 9 de novembro de 2012 12:46
  • 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.

    sábado, 10 de novembro de 2012 01:23
  • Veja a ultima resposta do post, lá tem a resposta.

    http://www.access-programmers.co.uk/forums/showthread.php?t=12538

    domingo, 11 de novembro de 2012 14:49
  • 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

    domingo, 11 de novembro de 2012 15:28