Problemas com a SQL.
Boa noite...
Tenho uma função que retorna um saldo:
Pode ser 3 opções:
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:
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...
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
Curtidas 0
Respostas
Jair Bg
03/12/2008
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...
PS: pode ser OR, IN BETWEEN...
GOSTEI 0
Freed
03/12/2008
Bom dia.
Fiz de outra forma, e a função ficou assim:
E para chamar a função ficou assim:
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..
Alguma idéia para ajustar esta SQL?
Grato...
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
Facc
03/12/2008
Verifique isso
acredito que seria assim
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 ********
GOSTEI 0
Freed
03/12/2008
Facc desta forma tabem não funcionou...
GOSTEI 0
Facc
03/12/2008
tenta fazer algo como isso.
[url]http://forum.devmedia.com.br/viewtopic.php?t=85373&highlight=[/url]
é um select com case
[url]http://forum.devmedia.com.br/viewtopic.php?t=85373&highlight=[/url]
é um select com case
GOSTEI 0
Webjoel
03/12/2008
Olá!
Parece que o problema está na sua conversão tente o seguinte:
Desta forma em vez de você pegar a data via Delphi, você pega via banco e o sql fica bem mais limpo.
Boa sorte!
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
Freed
03/12/2008
webjoel acho que não é este problema.
Meu banco é do Access e o codigo abaixo acho que é apenas para o firebird..
Continuo na batalha...
Grato..
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