Fórum Problemas com a SQL. #366708

03/12/2008

0

Boa noite...

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

Freed

Responder

Posts

04/12/2008

Jair Bg

Bom Dia olhe seu SQL onde a clausula ´WHERE AND (TIPO = ´X´ ) e depois você ´AND (TIPO =´Y) não pode ser ´D´ e ´C´ modifique isso.
PS: pode ser OR, IN BETWEEN...


Responder

Gostei + 0

04/12/2008

Freed

Bom dia.

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


Responder

Gostei + 0

04/12/2008

Facc

Verifique isso

DM.SAldo.SQL.Add(´AND Data >=´+datetostr(DAte));// ***** retorna apenas de datas menores que hoje ********


acredito que seria assim

DM.SAldo.SQL.Add(´AND Data < ´+datetostr(DAte));// ***** retorna apenas de datas menores que hoje ********



Responder

Gostei + 0

04/12/2008

Freed

Facc desta forma tabem não funcionou...


Responder

Gostei + 0

04/12/2008

Facc

tenta fazer algo como isso.

[url]http://forum.devmedia.com.br/viewtopic.php?t=85373&highlight=[/url]

é um select com case


Responder

Gostei + 0

05/12/2008

Webjoel

Olá!

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!


Responder

Gostei + 0

05/12/2008

Freed

webjoel acho que não é este problema.

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar