PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Busca resultado sobre intervalo de datas. #60393

31/12/2008

0

Pessoal, preciso fazer um tipo de busca por datas mais são dois campos diferentes
Os campos
Referencia1
Referencia2

Então no form tenho dois jvDateEdits

Data Inicial e Data Final

E um SQL de busca assim
with dm.ibMovimentos do
  begin
    DisableControls;
    Close;
    SelectSQL.Text := ´ select * from movimento    ´+
                      ´ where referencia1 = :pref1 ´+
                      ´ and referencia2 = :pref2   ´+
                      ´ and cod_empresa = :pcdempr ´;
    ParamByName(´pref1´).asDate := JvDateEdit1.Date;
    ParamByName(´pref2´).asDate := JvDateEdit2.Date;
    ParamByName(´pcdempr´).asString := dsListEmpresas.DataSet.FieldByName(´cdempresa´).AsString;
    Open;
    {Traz o resultado no label da quantidade de registros}
    FetchAll;
    label12.Caption := ´Quantidade de Registros: ´+ IntToStr(RecordCount);
    EnableControls;
  end;


Mais neste caso ai, só me retorna a busca caso seja exato o valor passado para o parametro. Ou seja se no banco esta gravado assim
Referencia1--------Referencia2 01/11/2008--------17/11/2008 15/11/2008--------30/11/2008 01/12/2008--------31/12/2008 01/12/2008--------20/12/2008 05/12/2008--------15/12/2008


E eu fizer por este select a busca de 01/12/2008 a 31/12/2008
Só vai me trazer o resultado assim
Referencia1--------Referencia2 01/12/2008--------31/12/2008



Então precisaria que ao digitar no edit a referencia de 01/12/2008 a 31/12/2008, me trazer o resultado assim:

Referencia1--------Referencia2 01/12/2008--------31/12/2008 01/12/2008--------20/12/2008 05/12/2008--------15/12/2008

Ou seja tudo que esta no mes 12/2008

Se digitar assim no jvDateEdits 01/12/2008 a 17/12/2008

Referencia1--------Referencia2 05/12/2008--------15/12/2008


Se digitar assim no jvDateEdits 01/12/2008 a 23/12/2008

Referencia1--------Referencia2 01/12/2008--------20/12/2008 05/12/2008--------15/12/2008


Não sei se entenderam, mais é isso que eu preciso.

Uso o FB 2.0


Adriano_servitec

Adriano_servitec

Responder

Posts

31/12/2008

Adriano_servitec

Estranho que usando o simbolo maior e menor, não esta dando certo, olhem

No aplicativo
with dm.ibMovimentos do
  begin
    DisableControls;
    Close;
    SelectSQL.Text := ´ select * from movimento      ´+
                      ´ where referencia1 >= :pref1  ´+
                      ´   and referencia2 <= :pref2  ´+
                      ´   and cod_empresa = :pcdempr ´;
    ParamByName(´pref1´).asDate := JvDateEdit1.Date;
    ParamByName(´pref2´).asDate := JvDateEdit2.Date;
    ParamByName(´pcdempr´).asString := dsListEmpresas.DataSet.FieldByName(´cdempresa´).AsString;
    Open;
    {Traz o resultado no label da quantidade de registros}
    FetchAll;
    label12.Caption := ´Quantidade de Registros: ´+ IntToStr(RecordCount);
    EnableControls;
  end;

Não traz o resultado corretamente

No ibexpert
select *
  from movimento
      where referencia1 >= :pref1
        and referencia2 <= :pref2
        and cod_empresa = :pcdempr

traz o resultado corretamente

Será que tem algo errado?


Responder

Gostei + 0

31/12/2008

Adriano_servitec

Engraçado que traz o resultado aqui no label
[b:0c0fa69fed]label12.Caption := ´Quantidade de Registros: ´+ IntToStr(RecordCount); [/b:0c0fa69fed]

Mais não aparece na grid, agora se eu colocar de 01/11/08 a 30/11/08 tenho 5 resultados e na grid apareçe apenas os que estao de 01/11/08 a 30/11/08 que são apenas 2.

O problema aqui que eu vi não é o resultado, e sim é que não esta aparecendo no grid.


Responder

Gostei + 0

02/01/2009

Adriano_servitec

Pessoal ainda não consegui resolver isso, ja troquei de dbgrid pra ver e nada também, fiz um comando de refresh no grid e nada tambem, fechei e abri a tabela depois da consulta e nada também.
Eu não entendo se no recordcount esta contando certo pq no dbgrid não mostra certo?

A mesma SQL no ibExpert traz certo e no dbgrid insiste em me errado.

Olhem bem
Se tenho na tabela gravado assim
referencia1-------referencia2 01/11/2008-------15/11/2008 01/11/2008-------15/11/2008 01/11/2008-------20/11/2008 01/11/2008-------30/11/2008 01/11/2008-------30/11/2008


E no componente digitar assim
01/11/2008 a 30/11/2008

Pelo que eu sei deveria me retornar todos que estão ai, não é?

Mais no dbgrid me mostra assim
referencia1-------referencia2 01/11/2008-------30/11/2008 01/11/2008-------30/11/2008

E no recordcount me traz a contagem de [b:4a632f5d18]05 itens[/b:4a632f5d18].

Se eu digitar no componente assim 01/11/2008 a 20/11/2008
Deveria me trazer assim na grid
referencia1-------referencia2 01/11/2008-------15/11/2008 01/11/2008-------15/11/2008 01/11/2008-------20/11/2008


Mais não, esta me trazendo assim
referencia1-------referencia2 01/11/2008-------20/11/2008

E a contagem no recordcont assim [b:4a632f5d18]03 itens[/b:4a632f5d18]

Eu ja não sei mais o que pode ser isso, alguma idéia ai pessoal?


Responder

Gostei + 0

02/01/2009

Adriano_servitec

Pessoal, me desculpe, mais agora que eu achei o problema depois que comentei o [b:1da22786aa]DISABLECONTROLS[/b:1da22786aa] pra ver mais devagar o resultado no grid, é que percebi o que estava acontecendo. Pois depois de confirmar automaticamente chamo outro form, e por não ter centralizado o SQL, o que eu fiz foi quando criei o sistema chamar novamente o select neste outro form,e eu não tinha corrigido este outro select no outro form portanto estava como postei no primeiro post ou seja o select estava sem os comandos de maior e menor.

Então aqui no botão confirma esta assim

procedure TfrmCadVar.BtnConfirmaClick(Sender: TObject);
begin
  {Primeiro limpo a variavel publica para não ficar gravado ao sair ou mudar de form}
  with dm.ibMovimentos do
  begin
    DisableControls;
    Close;
    SelectSQL.Text := ´ select * from movimento      ´+
                      ´ where referencia1 >= :pref1  ´+
                      ´   and referencia2 <= :pref2  ´+
                      ´   and cod_empresa = :pcdempr ´;
    ParamByName(´pref1´).AsDate := (JvDateEdit1.Date);
    ParamByName(´pref2´).AsDate := (JvDateEdit2.Date);
    ParamByName(´pcdempr´).asString := dsListEmpresas.DataSet.FieldByName(´cdempresa´).AsString;
    Open;
    {Traz o resultado no label da quantidade de registros}
    FetchAll;
    label12.Caption := ´Quantidade de Registros: ´+ IntToStr(RecordCount);
    DBGrid1.Refresh;
    EnableControls;
  end;
  Application.CreateForm(TfrmLtoMovimentoMes, frmLtoMovimentoMes);
  try
    frmLtoMovimentoMes.ShowModal;
  finally
    frmLtoMovimentoMes.Release;
    FreeAndNil(frmLtoMovimentoMes);//Para Destruir o Form
  end;
end;


E ao abrir outro form filtrava de novo assim
with dm.ibMovimentos do
  begin
    DisableControls;
    Close;
    SelectSQL.Text := ´ select * from movimento    ´+
                      ´ where referencia1 = :pref1 ´+
                      ´ and referencia2 = :pref2   ´+
                      ´ and cod_empresa = :pcdempr ´;
    ParamByName(´pref1´).asDate := JvDateEdit1.Date;
    ParamByName(´pref2´).asDate := JvDateEdit2.Date;
    ParamByName(´pcdempr´).asString := dsListEmpresas.DataSet.FieldByName(´cdempresa´).AsString;
    Open;
    {Traz o resultado no label da quantidade de registros}
    FetchAll;
    label12.Caption := ´Quantidade de Registros: ´+ IntToStr(RecordCount);
    EnableControls;
  end;


Ai como o primeiro form fica embaixo do segundo via na grid apenas o que filtrava no segundo form.

Resumindo, o erro foi por causa do [b:1da22786aa]PDDD (Programador Desatento, Desacordado e Desorientado)[/b:1da22786aa] :oops:


Responder

Gostei + 0

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

Aceitar