Calculo do dia 5 de um mês a 5 do outro

Delphi

02/08/2005

Pessoal, tenho um TMonthCalendar e gostaria que, quando selecionado um determinado mês (de qualquer ano) ele fizesse uma busca dos valores do dia 5 desse mês e do dia 5 do mês seguinte.
:shock: :roll:


Vagner.oliveira

Vagner.oliveira

Curtidas 0

Respostas

Motta

Motta

02/08/2005

Buscar o que ? aonde ?


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Buscar o que ? aonde ?


Pessoal, tenho um TMonthCalendar e gostaria que, quando selecionado um determinado mês (de qualquer ano) ele fizesse uma busca dos valores do dia 5 desse mês e do dia 5 do mês seguinte.


Fiz no onclick do MonthCalendar , mas se pode estender para aonde voce quiser..

var
 datainicial,DataFinal:TDate;


procedure TForm1.MonthCalendar1Click(Sender: TObject);
var
 ano,mes,dia:Word;
begin
  decodedaTe(MonthCalendar1.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);
 Showmessage(Datetostr(DataInicial));
 Showmessage(DateTostr(DataFinal));
end;


Quando a Busca e so passar como Parametros..

Suponha que voce tenha um campo [b:e0f89a66f1]Data[/b:e0f89a66f1] no seu banco de dados. E so fazer :

query1.close;
query1.sql.add(´Select *From Nome da tabela´)
query1.sql.add(´Where Data <=:DataI´);
query1.FieldByName(´dataI´).AsDateTime:=DataInicial;
query1.sql.add(´Where Data >=:DataF´);
query1.FieldByName(´dataF´).AsDateTime:=Datafinal;
query1.Prepare;
query1.open;



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

opa, tem como fazer a consulta sem a [b:27cd412abd]´/´[/b:27cd412abd] pois está dando erro


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

opa, tem como fazer a consulta sem a [b:2d980f4e85]´/´[/b:2d980f4e85] pois está dando erro


tenho o campo data so que ocorre o erro na consulta:
field ´data´ not found

tenho o campo na tabela chamado [b:2d980f4e85]data[/b:2d980f4e85] que está como data, so que o campo tem apenas um dado.


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Vamos por partes

opa, tem como fazer a consulta sem a ´/´ pois está dando erro


isto possivelmente nçao tem nada a ver com a consulta , mais precisamente com a sua mascara No MaskEdit.. Mas parece que voce resolveu esta etapa

tenho o campo data so que ocorre o erro na consulta: field ´data´ not found


Amigo , inclua este campo no fields Editor da query


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

uso delphi 6 e não tem este campo :oops:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

uso delphi 6 e não tem este campo :oops:

:oops: :oops: opa to fumado, achei o troço :oops: :oops:


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

vagner.deoliveira escreveu: uso delphi 6 e não tem este campo opa to fumado, achei o troço


clique com o botão Direito do mouse sobre sua query e escolha a opção Fields Editor
Depois de Novamente Um Click No Editor de campos que ira aparecer e escolha a opção Add Fileds ou Add All Fields


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

abri a query e coloquei o código:

Select * 
From tabela 
Where datai <=:5/8/2005 
and dataf >=:5/9/2005


pra fazer um teste, mas quando ativo da erro:
[b:87c80cc0c5] field ´5/8/2005´ is a unknown type[/b:87c80cc0c5]
se tentar com o código q me mandou
Select * From tabela
Where Data <=:5/8/2005 
Where Data >=:5/9/2005 


[b:87c80cc0c5] invalid use of keyword. Token ´Where´ line 3[/b:87c80cc0c5]
troco o [b:87c80cc0c5]where[/b:87c80cc0c5] para [b:87c80cc0c5]and[/b:87c80cc0c5] e da o erro de cima.

[b:87c80cc0c5][color=red:87c80cc0c5]Saliento que a tabela tem apenas um dado[/color:87c80cc0c5][/b:87c80cc0c5]


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Eta :!: :!: :!:

se voce quiser fazer um teste em tempo de Projeto , deve usar o Parametro do Objecto Inspector da query

Mas vamos deixar isto para depois

Deixe a sql da query em tempo de projeto somente com isso :

Select * 
From tabela 


[b:0a5cc78b47]em tempo de execução , em algum lugar , ou evento escreva o código abaixo[/b:0a5cc78b47]:::


query1.close; 
query1.sql.add(´Select *From Nome da tabela´) 
query1.sql.add(´Where Data <=:DataI´); 
query1.FieldByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); 
query1.sql.add(´Where Data >=:DataF´); 
query1.FieldByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); 
query1.Prepare; 
query1.open;


[b:0a5cc78b47]O proximo passo é trocar os valores StrToDate(´5/8/2005´) e StrToDate(´5/9/2005´) pelas variáveis DataInicial e DataFinal[/b:0a5cc78b47]


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

[quote:078de504b3=´Marco Salles´]Eta :!: :!: :!:

se voce quiser fazer um teste em tempo de Projeto , deve usar o Parametro do Objecto Inspector da query

Mas vamos deixar isto para depois

Deixe a sql da query em tempo de projeto somente com isso :

Select * 
From tabela 


[b:078de504b3]em tempo de execução , em algum lugar , ou evento escreva o código abaixo[/b:078de504b3]:::


query1.close; 
query1.sql.add(´Select *From Nome da tabela´) 
query1.sql.add(´Where Data <=:DataI´); 
query1.FieldByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); 
query1.sql.add(´Where Data >=:DataF´); 
query1.FieldByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); 
query1.Prepare; 
query1.open;


[b:078de504b3]O proximo passo é trocar os valores StrToDate(´5/8/2005´) e StrToDate(´5/9/2005´) pelas variáveis DataInicial e DataFinal[/b:078de504b3][/quote:078de504b3]

apareceu erro:
[b:078de504b3] Dataset Not in edit or insert mode[/b:078de504b3]


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Código: query1.close; query1.sql.add(´Select *From Nome da tabela´) query1.sql.add(´Where Data <=:DataI´); query1.FieldByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); query1.sql.add(´Where Data >=:DataF´); query1.FieldByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); query1.Prepare; query1.open; O proximo passo é trocar os valores StrToDate(´5/8/2005´) e StrToDate(´5/9/2005´) pelas variáveis DataInicial e DataFinal


apareceu erro: Dataset Not in edit or insert mode


Junto com este código tem mais algum código :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

se por o comando bettwen no SQL será que não vai funcionar ?


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

coloquei esse código na SQL e foi:
Select * From Tabela 
where datai <= ´7/4/2005´ and dataf >= ´8/4/2005´


só que a data está como [b:8221352b47]mm/dd/yyyy[/b:8221352b47] gostaria do contrário


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

coloquei esse código na SQL e foi:
Select * From Tabela 
where datai <= ´7/4/2005´ and dataf >= ´8/4/2005´
só que a data está como [b:d12d36fdf7]mm/dd/yyyy[/b:d12d36fdf7] gostaria do contrário


Estou tendo dificuldade em pegar os dados do [b:d12d36fdf7]EncodeDate[/b:d12d36fdf7] e colocá-los na Query no formato dd/mm/yyyy


GOSTEI 0
Massuda

Massuda

02/08/2005

Que BD você está usando? Se for Paradox, o formato de data usado nas queries segue o padrão americano, ou seja, mês-dia-ano, e não tem como mudar isso.

Use uma query parametrizada, como já foi mostrado em alguns posts deste tópico...
query1.close; 
query1.sql.add(´Select *From Nome da tabela´) 
query1.sql.add(´Where Data <=:DataI´); 
query1.sql.add(´Where Data >=:DataF´); 

query1.ParamByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); 
query1.ParamByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); 

query1.Prepare; 
query1.open;

Um erro que tem no código postado anteriormente é que estava atribuindo valor as parametros usando FieldByName ao invés de ParamByName.


GOSTEI 0
Massuda

Massuda

02/08/2005

Relendo vi que o código que postei (copiei de outro post) ainda contem erros... o correto seria...
query1.close; 

query1.sql.add(´Select * From Nome_da_tabela´) ;
query1.sql.add(´Where DataI <=:DataI´); 
query1.sql.add(´and DataF >=:DataF´); 

query1.ParamByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); 
query1.ParamByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); 

query1.Prepare; 
query1.open;
Pelo que entendi sua tabela não tem o campo Data, mas tem os campos DataI e DataF.


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

Relendo vi que o código que postei (copiei de outro post) ainda contem erros... o correto seria...
query1.close; 

query1.sql.add(´Select * From Nome_da_tabela´) ;
query1.sql.add(´Where DataI <=:DataI´); 
query1.sql.add(´and DataF >=:DataF´); 

query1.ParamByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); 
query1.ParamByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); 

query1.Prepare; 
query1.open;
Pelo que entendi sua tabela não tem o campo Data, mas tem os campos DataI e DataF.


insery o codigo [b:7c3f8b39f6]query1.SQL.Clear[/b:7c3f8b39f6] antes pois estava dando erro, já que minha query já tem o [b:7c3f8b39f6]select * from tabela[/b:7c3f8b39f6] só que não filtra nada....


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

segue o código:
Qdata.close;
Qdata.sql.Clear;

Qdata.sql.add(´Select * From tabela´) ;
Qdata.sql.add(´Where DataI >=:DataI´);
Qdata.sql.add(´and DataF <=:DataF´);

Qdata.ParamByName(´dataI´).AsDateTime:=DataInicial; // 5/8/2005
Qdata.ParamByName(´dataF´).AsDateTime:=Datafinal;  // 5/9/2005

Qdata.Prepare;
Qdata.open;


só que ele está filtrando apenas as datas que começam com dia 5.
tenho um dia 4/9/2005 e ele não mostra.


GOSTEI 0
Massuda

Massuda

02/08/2005

Essa data (4/9/2005) está em qual campo (DataI ou DataF)? Nesse registro em particular, qual o valor do outro campo data (DataI/DataF)?


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Culpa minha ... :cry: :cry: :cry: .. Uma coisa simples se transforma...

Um erro que tem no código postado anteriormente é que estava atribuindo valor as parametros usando FieldByName ao invés de ParamByName.


[b:68ed53d29f]massuda Citou[/b:68ed53d29f]
Pelo que entendi sua tabela não tem o campo Data, mas tem os campos DataI e DataF.


:oops: :oops: :oops: :oops: :oops: :oops: :oops:
[b:68ed53d29f]Não massuda , eu é que me enganei porque postei erradamente...[/b:68ed53d29f]

[b:68ed53d29f]A tabela tem Sim o campo data ..e voce postou corretamente com exceção da Intrução query1.SQL.Clear... Eu é que postei erradamente Pois troquei [color=darkred:68ed53d29f]ParamByName Por FieldByName [/color:68ed53d29f][/b:68ed53d29f]

[b:68ed53d29f]Massuda Postou...[/b:68ed53d29f]
query1.close; query1.sql.add(´Select *From Nome da tabela´) query1.sql.add(´Where Data <=:DataI´); query1.sql.add(´Where Data >=:DataF´); query1.ParamByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); query1.ParamByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); query1.Prepare; query1.open;


[b:68ed53d29f]vagner.deoliveira Cita sugerindo uma pequena alteração[/b:68ed53d29f]
insery o codigo query1.SQL.Clear antes pois estava dando erro, já que minha query já tem o select * from tabela


Correto [b:68ed53d29f]vagner.deoliveira[/b:68ed53d29f]... De fato tem que inserir este código , ficando assim

[b:68ed53d29f]vagner.deoliveira Postou:[/b:68ed53d29f]
query1.close; 
query1.sql.Clear;
query1.sql.add(´Select *From Nome da tabela´) 
query1.sql.add(´Where Data <=:DataI´); 
query1.sql.add(´Where Data >=:DataF´); 

query1.ParamByName(´dataI´).AsDateTime:=StrToDate(´5/8/2005´); 
query1.ParamByName(´dataF´).AsDateTime:=StrToDate(´5/9/2005´); 

query1.Prepare; 
query1.open;


já que minha query já tem o select * from tabela só que não filtra nada....


[b:68ed53d29f]Isto sera o proximo passo , a criação de paramentros a nivel de projeto... Logo depois de tudo terminado a gente ataca este problema .. Ok!!!![/b:68ed53d29f]..

Vamos primeiro Resolver o Problema da consulta..


[b:68ed53d29f]Quando estava escrevendo este topico , verifiquei que voce resolveu parcialmente o Problema da consulta , mas surgiu um [color=darkblue:68ed53d29f]Novo[/color:68ed53d29f] Porblema[/b:68ed53d29f]

segue o código: 
Código: 

Qdata.close; 
Qdata.sql.Clear; 

Qdata.sql.add(´Select * From tabela´) ; 
Qdata.sql.add(´Where DataI >=:DataI´); 
Qdata.sql.add(´and DataF <=:DataF´); 

Qdata.ParamByName(´dataI´).AsDateTime:=DataInicial; // 5/8/2005 
Qdata.ParamByName(´dataF´).AsDateTime:=Datafinal;  // 5/9/2005 

Qdata.Prepare; 
Qdata.open;


[b:68ed53d29f]só que ele está filtrando apenas as datas que começam com dia 5.
tenho um dia 4/9/2005 e ele não mostra./[/b:68ed53d29f]


[b:68ed53d29f]Certifique-se do valor da Variavel DataInicial e DataFinal[/b:68ed53d29f], Como voce esta obetendo o Valor destas Variáveis :?: :?: :?: Voce esta obtendo-as a partir do código que eu coloquei no Click Do componente MontCarh :?: :?: :?: Em que secção da Unit Esta declarado estas Variavéis :?: :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

[color=green:dcb4bc79e9][size=24:dcb4bc79e9]Funcionou[/size:dcb4bc79e9][/color:dcb4bc79e9]

Quero agradecer a Marco Salles e o Massuda que me ajudaram, muito obrigado.

Segue o código que filtra o dia 5 do mês ao dia 4 do outro:
// separa dados do dia 5 de cada mês
  decodedaTe(Calendario.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);

// Mostra dia selecionado
Qdata.close;
Qdata.sql.Clear;

Qdata.sql.add(´Select * From tabela´) ;
Qdata.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);

Qdata.Prepare;
Qdata.open;



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

[color=green:0535e1bf33][size=24:0535e1bf33]Funcionou[/size:0535e1bf33][/color:0535e1bf33] Quero agradecer a Marco Salles e o Massuda que me ajudaram, muito obrigado. Segue o código que filtra o dia 5 do mês ao dia 4 do outro:
// separa dados do dia 5 de cada mês
  decodedaTe(Calendario.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);

// Mostra dia selecionado
Qdata.close;
Qdata.sql.Clear;

Qdata.sql.add(´Select * From tabela´) ;
Qdata.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);

Qdata.Prepare;
Qdata.open;


Amigos, estou enfrentando outro problema, :x após efetuar o filtro pelas datas é feita a soma entre elas. Só que há campos sem dado e está dando um erro nestes campos, [b:0535e1bf33] ´´ is not a valid point value. [/b:0535e1bf33] ocorre este erro quando não tem nada na tablela. Gostaria de saber como contornar este erro. :roll:


GOSTEI 0
Massuda

Massuda

02/08/2005

Assumindo que você está acessando o campo problemático usando um TField (ou derivado), teste antes se o campo está vazio usando a propriedade IsNull; se for True, o campo está vazio, nem adianta fazer conta com ele.


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

está vazio sim...

como utilizo o comando [b:abf5ec9c1d]IsNull[/b:abf5ec9c1d]?


GOSTEI 0
Massuda

Massuda

02/08/2005

como utilizo o comando [b:5612b14a92]IsNull[/b:5612b14a92]?
Não sei como você está pegando os valores, mas imaginando que Qdata seja sua query, seria algo assim...
if not QData.FieldByName(´SeuCampo´).IsNull then begin
  // faz a conta com SeuCampo
end
else begin
  // trata o caso de não ter o valor
end;



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

esta dando erro:

[b:3760a7c4ee] QSomar: Field ´ValorRecebido´ not found[/b:3760a7c4ee]

mas o valor existe.


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

esta dando erro: [b:57910b4397] QSomar: Field ´ValorRecebido´ not found[/b:57910b4397] mas o valor existe.


segue o código:
        // Soma do Lucro
        if not (Qsomar.FieldByName(´ValorRecebido´).IsNull) Then
        Begin
        Qsomar.close;
        QSomar.sql.Clear;
        QSomar.sql.add(´Select Sum (ValorRecebido) From tabela´) ;
        QSomar.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
        QSomar.Prepare;
        QSomar.open;
        end Else
        Exit;



GOSTEI 0
Massuda

Massuda

02/08/2005

esta dando erro...
Desculpe... desconsidere o que escrevi... eu estava pensando na sua query original deste tópico, mas pelo visto o problema agora é outro, totalmente sem relação com o problema original.

Retire o teste que sugeri e indique onde está dando o erro de conversão para ponto flutuante. Seria melhor você abrir outro tópico.


GOSTEI 0
Nandolh

Nandolh

02/08/2005

Já tentou pegar um livro de SQL...


:evil: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

Já tentou pegar um livro de SQL... :evil: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:


Desculpe amigo, mas se não vai colaborar, fique com vc suas indignações


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

Segue o
procedure TF_principal.CalendarioClick(Sender: TObject);
var ano,mes,dia:Word;
    DatainIcial,DataFinal:TDate;
    lucro, prejuizo: real;
begin
LData.Caption:=FormatDateTime(´dd/mm/yyyy´,Calendario.Date);
SBEditar.Enabled:=True;
TFinancas.Cancel;

// separa dados do dia 5 de cada mês
  decodedaTe(Calendario.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);

// Filtra dia 5 dos meses
Qdata.close;
Qdata.sql.Clear;
Qdata.sql.add(´Select * From tabela´) ;
Qdata.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
Qdata.Prepare;
Qdata.open;

// Filtra data do indice
QIndiceF.close;
QIndiceF.sql.Clear;
QIndiceF.sql.add(´Select * From tabela´) ;
QIndiceF.sql.add(´Where Data = ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,Calendario.Date) +´´´´) ;
QIndiceF.Prepare;
QIndiceF.open;

// Soma Lucro do Mês
        Begin
        Qsomar.close;
        QSomar.sql.Clear;
        QSomar.sql.add(´Select Sum (ValorRecebido) From tabela´) ;
        QSomar.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
        QSomar.Prepare;
        QSomar.open;
        end;

//Soma do Prejuízo
  Begin
  QSubtrair.close;
  QSubtrair.sql.Clear;
  QSubtrair.sql.add(´Select Sum (ValorGasto) From tabela´) ;
  QSubtrair.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
  QSubtrair.Prepare;
  QSubtrair.open;
 end;

 // Calcula Lucro
 Lucro:=StrToFloat(DBBruto.Caption);
 Prejuizo:=StrToFloat(DBprejuizo.Caption);
 if (DBBruto.Caption=´´) and (DBprejuizo.Caption=´´) then
 Begin
 LLucro.Caption:=´0,00´;
 Exit;
 End else
 LLucro.Caption:=FormatFloat(´#0.00´, lucro-prejuizo);

// Atribuição CheckBoxes
CBCheque.DataSource:=DSData;
CBDinheiro.DataSource:=DSData;

end;



GOSTEI 0
Nandolh

Nandolh

02/08/2005

Mas o que afinal vc quer?


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

Mas o que afinal vc quer?

é o seguinte: quando faço a soma entre o dia 5 de um mês e o outro (como mostra o código) ocorre o erro... :shock:


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Amigos, estou enfrentando outro problema, após efetuar o filtro pelas datas é feita a soma entre elas. Só que há campos sem dado e está dando um erro nestes campos, ´´ [b:1dea188a34]is not a valid point value[/b:1dea188a34]. ocorre este erro quando não tem nada na tablela. Gostaria de saber como contornar este erro.


[b:1dea188a34]amigo ...acredito que o erro esta em uma dessas linhas abaixo[/b:1dea188a34]

Lucro:=StrToFloat(DBBruto.Caption); Prejuizo:=StrToFloat(DBprejuizo.Caption);


Se voce quiser o resultado da [b:1dea188a34]soma[/b:1dea188a34] use a propriedade FieldByName

Por exemplo

Note a definição (ValorRecebido) as TotalRecebido que não tinha no seu código original :::

Begin 
  Qsomar.close; 
  QSomar.sql.Clear; 
   QSomar.sql.add(´Select Sum (ValorRecebido) as TotalRecebido From tabela´) ; 
   QSomar.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´); 
    QSomar.Prepare; 
    QSomar.open; 
  end; 

Deste Campo ´TotalRecebido´ Voce tira o que voce quiser...

Por exemplo

//Ja esta em Formato String
Label1.Caption:=Qsomar.FieldByName(´TotalRecebido).AsString

//Formato Currency
Lucro:=Qsomar.FieldByName(´TotalRecebido).AsCurrency;

Agora , eu acho que é muita query para fazer pouca coisa , ja que a a Busca é a mesma para as tres querys... Mas isto é outro Papo


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

Sobre as querys concordo, mas é que acho mais organizado... :lol:

Só está faltando 1 coisa: Como vou formatar para aparecer [b:1b58a3766c]0,00[/b:1b58a3766c], pois está aparecendo somente um número: [b:1b58a3766c] 0[/b:1b58a3766c]


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

So para não confundir quem estiver acompanhando este tópico :

Recebi uma MP com o conteudo:

Desculpe, não vi a mensagem... Funcionou perfeitamente Valeu mesmo Marco pela paciência


Senão as coisas ficam no ar....

Só está faltando 1 coisa: Como vou formatar para aparecer 0,00, pois está aparecendo somente um número: 0


Acho que pode ser feito de várias maneiras...

Tente isso:

Label1.Caption:=FormatCurr(´#.00´,Qsomar.FieldByName(´TotalRecebido).AsCurrency ));



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

Funcionou perfeitamente Brigadão Marco


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Beleza...


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

[Estou com outro problema[/b] neste código. Quando vou para o ano seguinte aparece o valor da soma do ano passado, sebdo que os campos estão vazios, no DBGrid com que filtra o dia 5 de cada mês aparece a data de 2005, sendo que estou em 2006. acredito que o erro estaja no [color=green:24f7c8f46e]encodedate[/color:24f7c8f46e]...
Abaixo o código:
procedure TF_principal.CalendarioClick(Sender: TObject);
var ano,mes,dia:Word;
    DatainIcial,DataFinal:TDate;
    lucro, prejuizo: real;
begin
LData.Caption:=FormatDateTime(´dd/mm/yyyy´,Calendario.Date);
SBEditar.Enabled:=True;
SBSalvar.Enabled:=False;
TFinancas.Cancel;

// Esconde Edits
DEValorRec.Visible:=False;
DEValorGasto.Visible:=False;
DENumCheque.Visible:=False;
DMGanhoE.Visible:=False;
DMGastoE.Visible:=False;

// separa dados do dia 5 de cada mês
  decodedaTe(Calendario.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia+1);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);

// Filtra dia 5 dos meses
Qdata.close;
Qdata.sql.Clear;
Qdata.sql.add(´Select * From tabela´) ;
Qdata.sql.add(´Where Data >=´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
Qdata.Prepare;
Qdata.open;

// Filtra data do indice
QIndiceF.close;
QIndiceF.sql.Clear;
QIndiceF.sql.add(´Select * From tabela´) ;
QIndiceF.sql.add(´Where Data = ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,Calendario.Date) +´´´´) ;
QIndiceF.Prepare;
QIndiceF.open;

// Soma Lucro do Mês
Qsomar.close;
QSomar.sql.Clear;
QSomar.sql.add(´Select Sum (ValorRecebido) as TotalRecebido From tabela´);
QSomar.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
QSomar.Prepare;
QSomar.open;

//Soma do Prejuízo
QSubtrair.close;
QSubtrair.sql.Clear;
QSubtrair.sql.add(´Select Sum (ValorGasto) as TotalGasto From tabela´) ;
QSubtrair.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
QSubtrair.Prepare;
QSubtrair.open;

 // Calcula Lucro
 Lucro:=Qsomar.FieldByName(´TotalRecebido´).AsCurrency;
 Prejuizo:=Qsubtrair.FieldByName(´TotalGasto´).AsCurrency;
 LLucro.Caption:=FormatFloat(´R$ #0.00´, lucro-prejuizo);
        if (lucro-prejuizo<0) then
        LLucro.Font.Color:=CLRed;
         if (lucro-prejuizo=0) then
         LLucro.Font.Color:=CLBlack;
          if (lucro-prejuizo>0) then
          LLucro.Font.Color:=CLBlue;

// Calcula Valor a receber
LEmpresaR.Caption:=FormatFloat(´R$ #0.00´, (lucro-prejuizo)*0.34);
LNossoR.Caption:=FormatFloat(´R$ 0.00´, (lucro-prejuizo)*0.33);

// Atribuição CheckBoxes
CBCheque.DataSource:=DSIndiceF;
CBDinheiro.DataSource:=DSIndiceF;

end;



GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

sebdo que os campos estão vazios, no DBGrid com que filtra o dia 5 de cada mês aparece a data de 2005


[b:b6cb40e600]O Seu dbGrid esta ligado a qual query afinal [/b:b6cb40e600] :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

liguei na query data (que filtra o dia 5 de cada mês) e aparecem os dados, tanto em 2005 quanto em qualquer ano


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

liguei na query data (que filtra o dia 5 de cada mês) e aparecem os dados, tanto em 2005 quanto em qualquer ano


desculpe aparese somente a soma total dos meses mas não aparece os dados. Ex
data (dd/mm/yyyy) Nome

05/08/2005 - R$ 40,00 fulano
06/08/2005 - R$ 10,00 ciclano
Soma = R$ 50,00

05/08/2006 - R$ 00,00 -
06/08/2006 - R$ 00,00 -
Soma = R$ 50,00


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

liguei na query data (que filtra o dia 5 de cada mês) e aparecem os dados, tanto em 2005 quanto em qualquer ano


desculpe aparese somente a soma total dos meses mas não aparece os dados. Ex data (dd/mm/yyyy) Nome


Não é lógico . pois sua queryData não tem o Campo soma :

Qdata.sql.add(´Select * From tabela´) ; 


O DbGrid liga ao DataSource e o DataSource Liga a Query...

Atençao , no Componente query tem uma Propriedade DataDource no Objecto Inspector... Nesta Propreidade no seu caso espécifico e na meioria dos Casos , deve ser deixada em Branco(Vazio)

No mais é so Ligar o DbGrid ao DataSource que aponta para o QueryData


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

não entendi o q tenho q fazer :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

não entendi o q tenho q fazer :?: :?:


Descobri onde está o erro: quando clico em editar ele verifica os campos, e insere um novo campo ou edita o que ja existe:

[code]
// verifica se o indece está vazio, se verdadeiro insere nova tabela
// se falso, edita os dados já inseridos

if (DEIndiceF.Field.IsNull=True) Then
Begin
TFinancas.Insert;
DEData.Text:=FormatDateTime(´mm/dd/yyyy´,Calendario.Date);
CBCheque.Checked:=False;
CBDinheiro.Checked:=False;
end Else
Begin
IndiceF:=StrToInt(DEIndiceF.Text);
TFinancas.Locate(´indice´,IndiceF,[]);
end;
[code]

Notei que ele só pega o dia e o mês, não está pegando o ano também, por isso que ocorre o erro... :lol:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

:x :?
coloquei esse código na query data só pra fazer um teste:
Select data From Tabela
Where Data Between ´08/05/2006´ and ´09/05/2006´
Order By Data


e os dados que ele retorna são:
[b:a41f70603f]
08/16/2006 - correto
08/30/2005 - errado
08/31/2005 - errado
[/b:a41f70603f]

??? não sei o que está errado no código ???

tentei com
Select data From Tabela
Where Data>= ´08/05/2006´ and data<=´09/05/2006´
Order By Data


e da o mesmo erro :(


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

liguei na query data (que filtra o dia 5 de cada mês) e aparecem os dados, tanto em 2005 quanto em qualquer ano


Citação:
desculpe aparese somente a soma total dos meses mas não aparece os dados. Ex data (dd/mm/yyyy) Nome


não entendi o q tenho q fazer


Descobri onde está o erro: quando clico em editar ele verifica os campos, e insere um novo campo ou edita o que ja existe:



// verifica se o indece está vazio, se verdadeiro insere nova tabela // se falso, edita os dados já inseridos


if (DEIndiceF.Field.IsNull=True) Then 
Begin 
TFinancas.Insert; 
DEData.Text:=FormatDateTime(´mm/dd/yyyy´,Calendario.Date); 
CBCheque.Checked:=False; 
CBDinheiro.Checked:=False; 
end Else 
Begin 
IndiceF:=StrToInt(DEIndiceF.Text); 
TFinancas.Locate(´indice´,IndiceF,[]); 
end; 


Notei que ele só pega o dia e o mês, não está pegando o ano também, por isso que ocorre o erro...


coloquei esse código na query data só pra fazer um teste: Código:


Select data From Tabela 
Where Data Between ´08/05/2006´ and ´09/05/2006´ 
Order By Data 


e os dados que ele retorna são: 08/16/2006 - correto 08/30/2005 - errado 08/31/2005 - errado ??? não sei o que está errado no código ??? tentei com Código:

Select data From Tabela 
Where Data>= ´08/05/2006´ and data<=´09/05/2006´ 
Order By Data


e da o mesmo erro




*****************************************************************************************

:lol: :lol: :lol: :lol:

[b:a8931a2436]São tantas indagaçoes e afirmaçoes que eu não sei qual devo responder...
Mas vou arriscar um palpite[/b:a8931a2436]
Vou responder a esta :

coloquei esse código na query data só pra fazer um teste: Código:


Select data From Tabela 
Where Data Between ´08/05/2006´ and ´09/05/2006´ 
Order By Data 


e os dados que ele retorna são: 08/16/2006 - correto 08/30/2005 - errado 08/31/2005 - errado


[b:a8931a2436]Muito estranho.. [/b:a8931a2436]

Voce esta fazendo isto a nivel de projeto e os dados retornados são esses: :?: :?: :?:

08/16/2006 - correto 08/30/2005 - errado 08/31/2005 - errado


[b:a8931a2436]Voce confirma isso[/b:a8931a2436] :?: :?: :?:

Aparentemente não tem nada de errado no codigo...


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

mas na query eu pretendia filtrar apenas o mes 08 do ano de 2006, porque está aparecendo os 2 anos ???


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

mas na query eu pretendia filtrar apenas o mes 08 do ano de 2006, porque está aparecendo os 2 anos ???


[b:e5bf5b6cf3]Mas voce não me respondeu [/b:e5bf5b6cf3] :cry: :cry: :cry:

Citação:
coloquei esse código na query data só pra fazer um teste: Código: Código: Select data From Tabela Where Data Between ´08/05/2006´ and ´09/05/2006´ Order By Data Citação: e os dados que ele retorna são: 08/16/2006 - correto 08/30/2005 - errado 08/31/2005 - errado



[b:e5bf5b6cf3]Muito estranho.. [/b:e5bf5b6cf3]

Pergunta :::::
[b:e5bf5b6cf3]Voce esta fazendo isto a nivel de projeto e os dados retornados são esses: Ou voce esta fazendo isto a nivel de execução [/b:e5bf5b6cf3] :?: :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

digitei o código dentro da query e a ativei, sem compilar nada, ae apareceu os dados no DBGrid, (é isso q vc queria saber :oops: )


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

digitei o código dentro da query e a ativei, sem compilar nada, ae apareceu os dados no DBGrid, (é isso q vc queria saber


Apareceu de maneira correta ou de maneira errada :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

aparece o mes e o o dia 05 de cada mês beleza, o único problema é que ele não filtra o ano... pega todos os anos não só o que eu quero


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

O que voce esta querendo é algo muito simples ... Ja deveríamos ter resolvido.

Sugiro fazer esta consulta utilizando [b:31d6c597e8]parametros[/b:31d6c597e8] ,

Faça este teste :

[b:31d6c597e8]Escreva no sql da query a nivel de projeto o seguinte[/b:31d6c597e8]:

select *from TabEntradaSaida
Where Data  BetWeen  :datai  and  :dataf


Va no objeto inspector Inspector da query e Procure a Propriedade [b:31d6c597e8]Params[/b:31d6c597e8].. Clik Nela

Selecione Datai e escolha para DataType o FkDate e coloque Como
Value a data Inicial  .. Exemplo 05/12/2005

Faça o mesmo para data Final

Selecione Datai e escolha para DataType o FkDate e coloque Como
Value a data Inicial  .. Exemplo 05/01/2006


E Finalmente Active = True e post o Resultado.


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

[b:9c3fb641ca]Type Mismatch in expression
11871 [$2E] [$5F]
[/b:9c3fb641ca]

Coloquei esse código na query:
Select * From tabela
Where Data BetWeen :05/09/2005 and :05/10/2005
Order By Data


Tentei colocar as datas entre aspas (´) e deu erro. O DataType é [b:9c3fb641ca]ftDate[/b:9c3fb641ca]


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

Voce não faz as coisas do jeito que a gente pede. :cry: :cry: :cry: :cry: :cry:

:arrow: :arrow: Por isso que vai dar erro do tipo

Type Mismatch in expression 11871 [$2E] [$5F]


[color=darkblue:bfa74a92f4][b:bfa74a92f4]Voce fez isto[/b:bfa74a92f4][/color:bfa74a92f4]

Coloquei esse código na query: Código: [quote:bfa74a92f4]Select * From tabela Where Data BetWeen :05/09/2005 and :05/10/2005 Order By Data


Tentei colocar as datas entre aspas (´) e deu erro. O DataType é ftDate[/quote:bfa74a92f4]

[color=darkblue:bfa74a92f4]E eu pedi isto:[/color:bfa74a92f4]

Escreva no sql da query a nivel de projeto o seguinte: Código:
select *from TabEntradaSaida 
Where Data  BetWeen  :datai  and  :dataf 
Va no objeto inspector Inspector da query e Procure a Propriedade Params.. Clik Nela Código:
Selecione Datai e escolha para DataType o FkDate e coloque Como 
Value a data Inicial  .. Exemplo 05/12/2005 
Faça o mesmo para data Final Código:
Selecione Datai e escolha para DataType o FkDate e coloque Como 
Value a data Inicial  .. Exemplo 05/01/2006 
[b:bfa74a92f4]E Finalmente Active = True e post o Resultado.[/b:bfa74a92f4]



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

:oops: :oops: :oops: Marco, agradeço encarecidamente sua paciência em tentar me ajudar mas eu fiz aquilo q me pediu :cry: :cry: :cry:

1º o [b:d728eb2ccc]FkDate[/b:d728eb2ccc] não existe....

2º coloquei a data inicial: [b:d728eb2ccc]05/09/2005 [/b:d728eb2ccc] e a
data final [b:d728eb2ccc]05/10/2005[/b:d728eb2ccc] como pediste:

3º uso o [b:d728eb2ccc]encode date[/b:d728eb2ccc] para pegar as datas de cada mês


PS: testei com a data nos formatos: [b:d728eb2ccc]dd/mm/yyyy[/b:d728eb2ccc], mm/dd/yyyy e [b:d728eb2ccc]dd/mm/yy[/b:d728eb2ccc]


GOSTEI 0
Marco Salles

Marco Salles

02/08/2005

1º o FkDate não existe....


é FtDate ;

3º uso o encode date para pegar as datas de cada mês


Estou fazendo tudo a nivel de projeto ... Isto não é necessário

PS: testei com a data nos formatos: dd/mm/yyyy, mm/dd/yyyy e dd/mm/yy


Ao usar parametros , não sera necessário se preocupar com Isto


Novamente Faça:

Escreva no sql da query a nivel de projeto o seguinte:

Código:
Código:
select *from TabEntradaSaida
Where Data BetWeen :datai and :dataf


Va no objeto inspector Inspector da query e Procure a Propriedade Params.. Clik Nela 
Código:
Selecione Datai e escolha para DataType o FkDate e coloque Como 
Value a data Inicial  .. Exemplo 05/12/2005  
Faça o mesmo para data Final Código:
Selecione Datai e escolha para DataType o FkDate e coloque Como 
Value a data Inicial  .. Exemplo 05/01/2006  
E Finalmente Active = True e post o Resultado.


Veja um exemplo de como fica para a Datai

[URL=http://imageshack.us][img:de937c09a5]http://img97.imageshack.us/img97/6049/imagemwagner0pg.jpg[/img:de937c09a5][/URL]

Faça o mesmo para Datef , so mudando o Value

[b:de937c09a5]Não tem erro... [/b:de937c09a5]


GOSTEI 0
Martins

Martins

02/08/2005

[quote:c34405cd93=´Marco Salles´]
1º o FkDate não existe....


é FtDate ;

3º uso o encode date para pegar as datas de cada mês


Estou fazendo tudo a nivel de projeto ... Isto não é necessário

PS: testei com a data nos formatos: dd/mm/yyyy, mm/dd/yyyy e dd/mm/yy


Ao usar parametros , não sera necessário se preocupar com Isto


Novamente Faça:

Escreva no sql da query a nivel de projeto o seguinte:

Código:
Código:
select *from TabEntradaSaida
Where Data BetWeen :datai and :dataf


Va no objeto inspector Inspector da query e Procure a Propriedade Params.. Clik Nela 
Código:
Selecione Datai e escolha para DataType o FkDate e coloque Como 
Value a data Inicial  .. Exemplo 05/12/2005  
Faça o mesmo para data Final Código:
Selecione Datai e escolha para DataType o FkDate e coloque Como 
Value a data Inicial  .. Exemplo 05/01/2006  
E Finalmente Active = True e post o Resultado.


Veja um exemplo de como fica para a Datai

[URL=http://imageshack.us][img:c34405cd93]http://img97.imageshack.us/img97/6049/imagemwagner0pg.jpg[/img:c34405cd93][/URL]

Faça o mesmo para Datef , so mudando o Value

[b:c34405cd93]Não tem erro... [/b:c34405cd93][/quote:c34405cd93]

É isso aí [b:c34405cd93]Marco[/b:c34405cd93]

Só para ilustrar como ele poderia fazer via código...
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Text := ´Select * From Reservat where card_exp = :data1 and purge_date = :data2´;
  Query1.Params[0].AsDate := StrToDate(Edit1.Text);
  Query1.Params[1].AsDate := StrToDate(Edit2.Text);
  Query1.Open;


Uma tabela exemplo só para ilustrar.

Boa Sorte!!!


GOSTEI 0
Crash

Crash

02/08/2005

facil d+....


var D, M, A: Word;
  Data1, Data2: TDate;
begin
  DecodeDate(MonthCalendar1.Date, A, M, D);
  Data1 := EncodeDate(A, M, 5);
  Data2 := IncMonth(Data1);
  Query.Params[0].AsDateTime := Data1;
  Query.Params[1].AsDateTime := Data2;
  Query.Open;
end;


na query coloque:

select * from tabela
where data >= :data1
and data <= :data2


t+


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

facil d+....
var D, M, A: Word;
  Data1, Data2: TDate;
begin
  DecodeDate(MonthCalendar1.Date, A, M, D);
  Data1 := EncodeDate(A, M, 5);
  Data2 := IncMonth(Data1);
  Query.Params[0].AsDateTime := Data1;
  Query.Params[1].AsDateTime := Data2;
  Query.Open;
end;
na query coloque:
select * from tabela
where data >= :data1
and data <= :data2
t+


Segui [b:359739a896]Religiosamente[/b:359739a896] TODAS as informações aqui passadas mas sempre ocorre o erro :cry: :cry: :cry:

Acredito que possa ser algo na tabela, ou no TMonthCalendar q utilizo.

Segue o código do componente Tmonthcalendar que faz a filtragem
procedure TF_principal.CalendarioClick(Sender: TObject);
var ano,mes,dia:Word;
    DatainIcial,DataFinal:TDate;
    lucro, prejuizo: real;
begin
LData.Caption:=FormatDateTime(´dd/mm/yyyy´,Calendario.Date);
SBEditar.Enabled:=True;
SBSalvar.Enabled:=False;
TFinancas.Cancel;

// Esconde Edits
DEValorRec.Visible:=False;
DEValorGasto.Visible:=False;
DENumCheque.Visible:=False;
DMGanhoE.Visible:=False;
DMGastoE.Visible:=False;

// separa dados do dia 5 de cada mês
  decodedaTe(Calendario.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia+1);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);

// Filtra dia 5 dos meses
Qdata.close;
Qdata.sql.Clear;
Qdata.sql.add(´Select * From tabela´) ;
//Qdata.sql.add(´Where Data >=´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
Qdata.sql.add(´Where Data BetWeen :datai and :dataf´);
Qdata.Prepare;
Qdata.open;

// Filtra data do indice
QIndiceF.close;
QIndiceF.sql.Clear;
QIndiceF.sql.add(´Select * From tabela´) ;
QIndiceF.sql.add(´Where Data = ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,Calendario.Date) +´´´´) ;
QIndiceF.Prepare;
QIndiceF.open;

// Soma Lucro do Mês
Qsomar.close;
QSomar.sql.Clear;
QSomar.sql.add(´Select Sum (ValorRecebido) as TotalRecebido From tabela´);
QSomar.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
QSomar.Prepare;
QSomar.open;

//Soma do Prejuízo
QSubtrair.close;
QSubtrair.sql.Clear;
QSubtrair.sql.add(´Select Sum (ValorGasto) as TotalGasto From tabela´) ;
QSubtrair.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
QSubtrair.Prepare;
QSubtrair.open;

 // Calcula Lucro
 Lucro:=Qsomar.FieldByName(´TotalRecebido´).AsCurrency;
 Prejuizo:=Qsubtrair.FieldByName(´TotalGasto´).AsCurrency;
 LLucro.Caption:=FormatFloat(´R$ #0.00´, lucro-prejuizo);
        if (lucro-prejuizo<0) then
        LLucro.Font.Color:=CLRed;
         if (lucro-prejuizo=0) then
         LLucro.Font.Color:=CLBlack;
          if (lucro-prejuizo>0) then
          LLucro.Font.Color:=CLBlue;

// Calcula Valor a receber
LEmpresaR.Caption:=FormatFloat(´R$ 0.00´, (lucro-prejuizo)*0.34);
LNossoR.Caption:=FormatFloat(´R$ 0.00´, (lucro-prejuizo)*0.33);

// Atribuição CheckBoxes
CBCheque.DataSource:=DSIndiceF;
CBDinheiro.DataSource:=DSIndiceF;

end;



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

02/08/2005

[quote:d87593690d=´CrasH´]facil d+....
var D, M, A: Word;
  Data1, Data2: TDate;
begin
  DecodeDate(MonthCalendar1.Date, A, M, D);
  Data1 := EncodeDate(A, M, 5);
  Data2 := IncMonth(Data1);
  Query.Params[0].AsDateTime := Data1;
  Query.Params[1].AsDateTime := Data2;
  Query.Open;
end;
na query coloque:
select * from tabela
where data >= :data1
and data <= :data2
t+


Segui [b:d87593690d]Religiosamente[/b:d87593690d] TODAS as informações aqui passadas mas sempre ocorre o erro :cry: :cry: :cry:

Acredito que possa ser algo na tabela, ou no TMonthCalendar q utilizo.

Segue o código do componente Tmonthcalendar que faz a filtragem
procedure TF_principal.CalendarioClick(Sender: TObject);
var ano,mes,dia:Word;
    DatainIcial,DataFinal:TDate;
    lucro, prejuizo: real;
begin
LData.Caption:=FormatDateTime(´dd/mm/yyyy´,Calendario.Date);
SBEditar.Enabled:=True;
SBSalvar.Enabled:=False;
TFinancas.Cancel;

// Esconde Edits
DEValorRec.Visible:=False;
DEValorGasto.Visible:=False;
DENumCheque.Visible:=False;
DMGanhoE.Visible:=False;
DMGastoE.Visible:=False;

// separa dados do dia 5 de cada mês
  decodedaTe(Calendario.Date,ano,mes,dia);
  dia:=5;
  DataInicial:=encodeDate(ano,mes,dia+1);
  if mes=12 Then
    begin
      mes:=1;
      ano:=ano+1;
    end
  else
    mes:=mes+1;
  DataFinal:=encodeDate(ano,mes,dia);

// Filtra dia 5 dos meses
Qdata.close;
Qdata.sql.Clear;
Qdata.sql.add(´Select * From tabela´) ;
//Qdata.sql.add(´Where Data >=´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
Qdata.sql.add(´Where Data BetWeen :datai and :dataf´);
Qdata.Prepare;
Qdata.open;

// Filtra data do indice
QIndiceF.close;
QIndiceF.sql.Clear;
QIndiceF.sql.add(´Select * From tabela´) ;
QIndiceF.sql.add(´Where Data = ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,Calendario.Date) +´´´´) ;
QIndiceF.Prepare;
QIndiceF.open;

// Soma Lucro do Mês
Qsomar.close;
QSomar.sql.Clear;
QSomar.sql.add(´Select Sum (ValorRecebido) as TotalRecebido From tabela´);
QSomar.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
QSomar.Prepare;
QSomar.open;

//Soma do Prejuízo
QSubtrair.close;
QSubtrair.sql.Clear;
QSubtrair.sql.add(´Select Sum (ValorGasto) as TotalGasto From tabela´) ;
QSubtrair.sql.add(´Where Data >= ´ +´´´´ +FormatDateTime(´mm/dd/yyyy´,DataInicial) +´´´´ + ´and data <=´ +´´´´ + FormatDateTime(´mm/dd/yyyy´,DataFinal) +´´´´);
QSubtrair.Prepare;
QSubtrair.open;

 // Calcula Lucro
 Lucro:=Qsomar.FieldByName(´TotalRecebido´).AsCurrency;
 Prejuizo:=Qsubtrair.FieldByName(´TotalGasto´).AsCurrency;
 LLucro.Caption:=FormatFloat(´R$ #0.00´, lucro-prejuizo);
        if (lucro-prejuizo<0) then
        LLucro.Font.Color:=CLRed;
         if (lucro-prejuizo=0) then
         LLucro.Font.Color:=CLBlack;
          if (lucro-prejuizo>0) then
          LLucro.Font.Color:=CLBlue;

// Calcula Valor a receber
LEmpresaR.Caption:=FormatFloat(´R$ 0.00´, (lucro-prejuizo)*0.34);
LNossoR.Caption:=FormatFloat(´R$ 0.00´, (lucro-prejuizo)*0.33);

// Atribuição CheckBoxes
CBCheque.DataSource:=DSIndiceF;
CBDinheiro.DataSource:=DSIndiceF;

end;
[/quote:d87593690d]

[size=24:d87593690d]Finalmente[/size:d87593690d] descobri o que estava errado :shock: :shock:

Minha tabela em [b:d87593690d]PARADOX[/b:d87593690d] estava com o mês em [b:d87593690d]Alpha[/b:d87593690d] troquei para tipo mês e funciona perfeitamente ([i:d87593690d]♪ aleluia &9834; aleluia &9834;[/i:d87593690d]) minha ´inguinorância´ não deixou ver isso...

Abração a todos que me ajudaram


GOSTEI 0
POSTAR