Fórum erro ao somar dados #272930

17/03/2005

0

Pessoal estou tendo muita dificuldade para somar dados do dia 05 de um mês até o outro dia 05.

Tenho uma tabela em paradox com os seguintes campos:

indice - autoincremento
meses - alpha
val_recebido - moeda
val_gasto - moeda
val_bruto - moeda
total_recebido - moeda
total_gasto - moeda
total_bruto - moeda
total_mensal - moeda
total_empresa - moeda

utilizando MESES como ALPHA e uma query para mostrar os dados funciona OK.
Segue o codigo usado dentro da query:
DE_meses - é um DBEdit que recebe a variavel MESES:
[color=green:d9b4b98962]select *
from calculo_gastos
where meses like ´¬´+DE_meses.text+´¬´
[/color:d9b4b98962]

Sé que, ao efetuar a soma, com o seguinte codigo tb dendro da query:
[color=green:d9b4b98962]SELECT SUM (Val_recebido)
FROM calculo_gastos
WHERE Meses BETWEEN ´05/03/2005´ AND ´05/04/2005´
[/color:d9b4b98962]

É somado apenas os dias 05/03 e 05/04.
Agora se alterar na tabela paradox os meses para DATE da a mesma coisa... ja digitei a data como [color=red:d9b4b98962]´05/03/2005´ AND ´05/04/2005´[/color:d9b4b98962] assim [color=darkred:d9b4b98962]´03/05/2005´ AND ´04/05/2005´[/color:d9b4b98962] assim [color=darkblue:d9b4b98962]´05/03/05´ AND ´05/04/05´[/color:d9b4b98962] e sempre soma so aqueles dias e não o mes inteiro.
Não sei o que tem de errado se alguem puder me ajudar agradeço


Vagner.oliveira

Vagner.oliveira

Responder

Posts

17/03/2005

Andremuller

Normalmente quando tu usa datas em selects deves usar o formato
mm/dd/yyyy ou yyyy-mm-dd

Pelo que entendi o paradox está tentando pegar as datas entre
03/05/2005 e 04/05/2005
vê se não é isso.

Isso varia de banco pra banco, por exemplo eu instalei o MSDE em português e o formato default a usar-se era dd/mm/yyyy, nesse caso não consegui mudar isso nem nas configurações regionais, nem em nenhum tipo de colation.

Mas o paradox, até onde saiba é mm/dd/yyyy então execute da seguinte forma
SELECT SUM (Val_recebido) FROM calculo_gastos WHERE Meses BETWEEN ´03/05/2005´ AND ´04/05/2005´



Responder

Gostei + 0

18/03/2005

Vagner.oliveira

mesma coisa, somou os dias 4 de cada mes apenas.

tel algum outro comando que possa efetuar a soma entre as datas ?


Responder

Gostei + 0

18/03/2005

Salupe

Tenta Assim :

SELECT SUM (Val_recebido)
FROM calculo_gastos
WHERE Meses BETWEEN ´´´+FormatDateTime(´mm/dd/yyyy´,strtodate(´03/05/2005´)+´´´ AND ´´´+FormatDateTime(´mm/dd/yyyy´,strtodate(´04/05/2005´)+´´´


Responder

Gostei + 0

18/03/2005

Andremuller

Tu certamentes está com algum tipo de filtro na aplicação, acabei de executar a seguinte query numa aplicação que tenho em paradox
select * from parcelas
where datasituacao
between ´05/01/2004´ and ´05/20/2004´

Ele me trouxe todas as parcelas com situação entre 1-5-2004 e 20-5-2004. Note que se ele interpretasse a segunda data como dd/mm/yyyy teria dado erro visto não existir nenhum mês 20.

Faça o seguinte, execute a query usando o mesmo formato (mm/dd/yyyy) no SQLExplorer e veja o resultado, caso o resultado seja diferente do dado pela aplicação então existe algum outro fator que está bloqueando o resultado total.

Não faz muito sentido mas tente utilizar data >= ´datainicial´ and data <= ´datafinal´, sem between, só pra ver o que acontece.

E então?


Responder

Gostei + 0

18/03/2005

Andremuller

Caro salupe,
seu código gera exatamento a mesma sql que já enviei.


Responder

Gostei + 0

18/03/2005

Salupe

realmente

só que colocando o formatdatetime ele faz com que o mes seja colocado no inicial, visto que o paradox e alguns outros bds utilizam o padrao mm/dd/yyyy, e com ele faz o bd reconhecer corretamente o padrao dele.


Responder

Gostei + 0

18/03/2005

Vagner.oliveira

alterei na tabela o campo MESES de Apha para DATE e agora da erro

type mismatch in expression:
e aponta para essa linha:
procedure TForm1.calendarioClick(Sender: TObject);
var meses:TDate;
begin
// atribui o dia de hoje //
//DE_meses.Text:=FormatDateTime(´mm/dd/yy´,Calendario.Date);
//Meses:=Calendario.Date; <<--

sendo q a mesma esta comentada


Responder

Gostei + 0

18/03/2005

Vagner.oliveira

a tabela esta como DATE no PARADOX

copiei o SQL enviado:
[b:3b05c77620]select *
from calculo_gastos
where meses between ´03/05/05´ and ´04/05/2005´[/b:3b05c77620]

e so apresenta os dados:
03/04/05
04/04/05

não apresenta os demais.

Com o comando MAIOR/NEMOR QUE ´<´ ´>´ da o mesmo erro, não tem filtro algum, pois criei uma nova aplicação so com 1 query, 1 data source e 1 dbgrid[/b]


Responder

Gostei + 0

18/03/2005

Andremuller

Cara, tem como compactar essa tabela e essa tua mini aplicação e enviar isso pra muller.a@gmail.com.

Então eu vejo, estamos divagando demais sobre um problema simples, acho que é apenas um erro de comunicação.

Se a tabela for muito grande exclui os registros que não são desse periodo que tu quer ver


Responder

Gostei + 0

21/03/2005

Vagner.oliveira

:twisted: :twisted: :twisted: :twisted:
consegui fazer o calclo funcionar, o problema é que quando compilo a aplicação da erro, type mismatch in expression... desabilitei as 2 querys e mesmo assim da erro....
:twisted: :twisted: :twisted: :twisted:


Responder

Gostei + 0

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

Aceitar