Fórum Problemas com a SQL. #366708
03/12/2008
0
Tenho uma função que retorna um saldo:
Pode ser 3 opções:
edit1.Text:=Saldo(´D´,´D´);//1º Opção retorna o total de débitos, indentificados no banco com "D" edit2.Text:=Saldo(´C´,´C´);//2º Opção retorna o total de Créditos, indentificados no banco com "C" edit3.Text:=Saldo(´D´,´C´);//3º Opção retorna o saldo, indentificados no banco com "C - D"
A 1º e a 2º opção funcionam corretamente retornando o total de débito e o total de créditos
E a 3º opção não retorna nada
A função:
function TForm1.Saldo(x,y:String):String; begin DM.SAldo.Close; DM.SAldo.SQL.Clear; DM.SAldo.SQL.Add(´SELECT sum(VALOR) as valor FROM HISTORICOFINANCEIRO WHERE USUARIO =´+quotedstr(Label2.Caption));//Usuário logado DM.SAldo.SQL.Add(´AND TIPO =´+quotedstr(x)); DM.SAldo.SQL.Add(´AND TIPO =´+quotedstr(y)); DM.SAldo.Open; Result:=DM.SAldo.FieldByName(´valor´).AsString; end;
No banco tem o campo ´Usuario, Valor, Tipo(D - para debito, C - Credito´
Algém sabe porque a 3º opção não funciona?
Algem tem uma idéa para apresentar todos os débitos no edit1, Créditos Edit2, Saldo no Edit3?
Grato...
Freed
Curtir tópico
+ 0Posts
04/12/2008
Jair Bg
PS: pode ser OR, IN BETWEEN...
Gostei + 0
04/12/2008
Freed
Fiz de outra forma, e a função ficou assim:
function TForm1.Saldo(Movimentacao:String):String; begin DM.SAldo.Close; DM.SAldo.SQL.Clear; DM.SAldo.SQL.Add(´SELECT sum(VALOR) as valor FROM HISTORICOFINANCEIRO WHERE USUARIO =´+quotedstr(Label2.Caption))//Usuário logado if Movimentacao = ´Debito´ then DM.SAldo.SQL.Add(´AND valor<0´); if Movimentacao = ´Credito´ then DM.SAldo.SQL.Add(´AND valor>0´); DM.SAldo.SQL.Add(´AND Data >=´+datetostr(DAte));// ***** retorna apenas datas menores que hoje ******** DM.SAldo.Open; Result:=DM.SAldo.FieldByName(´valor´).AsString; end;
E para chamar a função ficou assim:
edit1.Text:=Saldo(´Credito´); // Retorna o valor total de créditos edit2.Text:=Saldo(´Debito´); // Retorna o valor total de débitos
Mas quero que retorne apenas o saldo de datas menores que hoje, ou seja os lançamentos futuros não podem ser somados....
Utilizei o código abaixo para filtrar isto, mas esta linha da função parece ser ignorada..
DM.SAldo.SQL.Add(´AND Data >=´+datetostr(DAte));// ***** retorna apenas de datas menores que hoje ********
Alguma idéia para ajustar esta SQL?
Grato...
Gostei + 0
04/12/2008
Facc
acredito que seria assim
DM.SAldo.SQL.Add(´AND Data < ´+datetostr(DAte));// ***** retorna apenas de datas menores que hoje ********
Gostei + 0
04/12/2008
Freed
Gostei + 0
04/12/2008
Facc
[url]http://forum.devmedia.com.br/viewtopic.php?t=85373&highlight=[/url]
é um select com case
Gostei + 0
05/12/2008
Webjoel
Parece que o problema está na sua conversão tente o seguinte:
DM.SAldo.SQL.Add(´AND Data < current_date´);// ***** retorna apenas de datas menores que hoje ********
Desta forma em vez de você pegar a data via Delphi, você pega via banco e o sql fica bem mais limpo.
Boa sorte!
Gostei + 0
05/12/2008
Freed
Meu banco é do Access e o codigo abaixo acho que é apenas para o firebird..
DM.SAldo.SQL.Add(´AND Data < current_date´);// ***** retorna apenas de datas menores que hoje ********
Continuo na batalha...
Grato..
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)