Calculo do dia 5 de um mês a 5 do outro
:shock: :roll:
Vagner.oliveira
Respostas
Motta
02/08/2005
Marco Salles
02/08/2005
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;
Vagner.oliveira
02/08/2005
Vagner.oliveira
02/08/2005
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.
Marco Salles
02/08/2005
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
Amigo , inclua este campo no fields Editor da query
Vagner.oliveira
02/08/2005
Vagner.oliveira
02/08/2005
:oops: :oops: opa to fumado, achei o troço :oops: :oops:
Marco Salles
02/08/2005
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
Vagner.oliveira
02/08/2005
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]
Marco Salles
02/08/2005
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]
Vagner.oliveira
02/08/2005
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]
Marco Salles
02/08/2005
Junto com este código tem mais algum código :?: :?: :?:
Vagner.oliveira
02/08/2005
Vagner.oliveira
02/08/2005
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
Vagner.oliveira
02/08/2005
Select * From Tabela where datai <= ´7/4/2005´ and dataf >= ´8/4/2005´
Estou tendo dificuldade em pegar os dados do [b:d12d36fdf7]EncodeDate[/b:d12d36fdf7] e colocá-los na Query no formato dd/mm/yyyy
Massuda
02/08/2005
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.
Massuda
02/08/2005
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;
Vagner.oliveira
02/08/2005
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;
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....
Vagner.oliveira
02/08/2005
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.
Massuda
02/08/2005
Marco Salles
02/08/2005
[b:68ed53d29f]massuda Citou[/b:68ed53d29f]
: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]
[b:68ed53d29f]vagner.deoliveira Cita sugerindo uma pequena alteração[/b:68ed53d29f]
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;
[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 :?: :?: :?: :?:
Vagner.oliveira
02/08/2005
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;
Vagner.oliveira
02/08/2005
// 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:
Massuda
02/08/2005
Vagner.oliveira
02/08/2005
como utilizo o comando [b:abf5ec9c1d]IsNull[/b:abf5ec9c1d]?
Massuda
02/08/2005
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;
Vagner.oliveira
02/08/2005
[b:3760a7c4ee] QSomar: Field ´ValorRecebido´ not found[/b:3760a7c4ee]
mas o valor existe.
Vagner.oliveira
02/08/2005
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;
Massuda
02/08/2005
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.
Nandolh
02/08/2005
:evil: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:
Vagner.oliveira
02/08/2005
Desculpe amigo, mas se não vai colaborar, fique com vc suas indignações
Vagner.oliveira
02/08/2005
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;
Nandolh
02/08/2005
Vagner.oliveira
02/08/2005
é 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:
Marco Salles
02/08/2005
[b:1dea188a34]amigo ...acredito que o erro esta em uma dessas linhas abaixo[/b:1dea188a34]
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
Vagner.oliveira
02/08/2005
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]
Marco Salles
02/08/2005
Recebi uma MP com o conteudo:
Senão as coisas ficam no ar....
Acho que pode ser feito de várias maneiras...
Tente isso:
Label1.Caption:=FormatCurr(´#.00´,Qsomar.FieldByName(´TotalRecebido).AsCurrency ));
Vagner.oliveira
02/08/2005
Marco Salles
02/08/2005
Vagner.oliveira
02/08/2005
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;
Marco Salles
02/08/2005
[b:b6cb40e600]O Seu dbGrid esta ligado a qual query afinal [/b:b6cb40e600] :?: :?: :?:
Vagner.oliveira
02/08/2005
Vagner.oliveira
02/08/2005
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
Marco Salles
02/08/2005
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
Vagner.oliveira
02/08/2005
Vagner.oliveira
02/08/2005
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:
Vagner.oliveira
02/08/2005
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 :(
Marco Salles
02/08/2005
Citação:
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;
Select data From Tabela Where Data Between ´08/05/2006´ and ´09/05/2006´ Order By Data
Select data From Tabela Where Data>= ´08/05/2006´ and data<=´09/05/2006´ Order By Data
*****************************************************************************************
: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 :
Select data From Tabela Where Data Between ´08/05/2006´ and ´09/05/2006´ Order By Data
[b:a8931a2436]Muito estranho.. [/b:a8931a2436]
Voce esta fazendo isto a nivel de projeto e os dados retornados são esses: :?: :?: :?:
[b:a8931a2436]Voce confirma isso[/b:a8931a2436] :?: :?: :?:
Aparentemente não tem nada de errado no codigo...
Vagner.oliveira
02/08/2005
Marco Salles
02/08/2005
[b:e5bf5b6cf3]Mas voce não me respondeu [/b:e5bf5b6cf3] :cry: :cry: :cry:
Citação:
[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] :?: :?: :?: :?:
Vagner.oliveira
02/08/2005
Marco Salles
02/08/2005
Apareceu de maneira correta ou de maneira errada :?: :?: :?:
Vagner.oliveira
02/08/2005
Marco Salles
02/08/2005
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.
Vagner.oliveira
02/08/2005
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]
Marco Salles
02/08/2005
:arrow: :arrow: Por isso que vai dar erro do tipo
[color=darkblue:bfa74a92f4][b:bfa74a92f4]Voce fez isto[/b:bfa74a92f4][/color:bfa74a92f4]
Tentei colocar as datas entre aspas (´) e deu erro. O DataType é ftDate[/quote:bfa74a92f4]
[color=darkblue:bfa74a92f4]E eu pedi isto:[/color:bfa74a92f4]
select *from TabEntradaSaida Where Data BetWeen :datai and :dataf
Selecione Datai e escolha para DataType o FkDate e coloque Como Value a data Inicial .. Exemplo 05/12/2005
Selecione Datai e escolha para DataType o FkDate e coloque Como Value a data Inicial .. Exemplo 05/01/2006
Vagner.oliveira
02/08/2005
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]
Marco Salles
02/08/2005
é FtDate ;
Estou fazendo tudo a nivel de projeto ... Isto não é necessário
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
Selecione Datai e escolha para DataType o FkDate e coloque Como Value a data Inicial .. Exemplo 05/12/2005
Selecione Datai e escolha para DataType o FkDate e coloque Como Value a data Inicial .. Exemplo 05/01/2006
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]
Martins
02/08/2005
é FtDate ;
Estou fazendo tudo a nivel de projeto ... Isto não é necessário
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
Selecione Datai e escolha para DataType o FkDate e coloque Como Value a data Inicial .. Exemplo 05/12/2005
Selecione Datai e escolha para DataType o FkDate e coloque Como Value a data Inicial .. Exemplo 05/01/2006
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!!!
Crash
02/08/2005
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+
Vagner.oliveira
02/08/2005
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;
select * from tabela where data >= :data1 and data <= :data2
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;
Vagner.oliveira
02/08/2005
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;
select * from tabela where data >= :data1 and data <= :data2
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;
[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