Filtro data no firebird

Delphi

26/11/2007

Pessoal, a SQL abaixo, não filtra por data, em tabela firebird.
No Paradox filtra, com este mesmo codigo. Aguem pode corrigir?
fazendo um favor.

procedure TFormRelatorioOrdemServico.ButtonPesquisaClick(Sender: TObject);
var
DataInicio, DataFinal, CodigoOS, DescricaoOS, Empresa, Prioridade
, TipoManutencao, Status: String;
begin
DataModuleManut.IBQueryOrdemServico.Close;
DataModuleManut.IBQueryOrdemServico.Open;
DataModuleManut.IBQueryOrdemServico.Refresh;
DataInicio:= DateToStr(DateTimePickerDataInicio.Date);
DataFinal:= DateToStr(DateTimePickerDataFinal.Date);
CodigoOS:= AnsiUpperCase(EditCodigoOrdemServico.Text);
DescricaoOS:= AnsiUpperCase(EditDescricaoOrdemServico.text);
Empresa:= AnsiUpperCase(DBLookupComboBoxCodigoEmpresa.text);
Prioridade:= AnsiUpperCase(DBLookupComboBoxCodigoPrioridade.text);
TipoManutencao:= AnsiUpperCase(DBLookupComboBoxCodigoTipoManutencao.text);
Status:= AnsiUpperCase(DBLookupComboBoxCodigoStatus.text);
with DataModuleManut.IBQueryOrdemServico do
Begin
close;
Sql.Clear;
Sql.Add(´SELECT * FROM OrdemServico´);
Sql.Add(´WHERE UPPER(CodOrdemServico) LIKE ´+#39+´¬´+ CodigoOS + ´¬´+39);
Sql.Add(´AND UPPER(DescricaoOrdemServico) LIKE ´+39+´¬´+ DescricaoOS +´¬´+39);//+´Order By Data desc´);
Sql.Add(´AND UPPER(CodEmpresa) LIKE ´+39+´¬´+ Empresa +´¬´+39);
Sql.Add(´AND UPPER(CodPrioridade) LIKE ´+39+´¬´+ Prioridade +´¬´+39);
Sql.Add(´AND UPPER(CodTipoManutencao) LIKE ´+39+´¬´+ TipoManutencao +´¬´+39);
Sql.Add(´AND UPPER(CodStatus) LIKE ´+39+´¬´+ Status +´¬´+39);
Filtered := True;
Filter:=´DATA >=´+39+DataInicio+39+´ AND DATA <=´+39+DataFinal+39;
open;
If DataModuleManut.IBQueryOrdemServico.RecordCount <= 0 Then
begin
ShowMessage(´Nenhum registro foi localizado.´);
exit;
End
Else
DataModuleManut.IBQueryOrdemServico.Open;
end;
end;

Abraço
Joao


Joao1313

Joao1313

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

26/11/2007

procedure TFormRelatorioOrdemServico.ButtonPesquisaClick(Sender: TObject);
var
  CodigoOS, DescricaoOS, Empresa, Prioridade,
  TipoManutencao, Status: String;
begin
  CodigoOS := AnsiUpperCase(EditCodigoOrdemServico.Text);
  DescricaoOS := AnsiUpperCase(EditDescricaoOrdemServico.text);
  Empresa := AnsiUpperCase(DBLookupComboBoxCodigoEmpresa.text);
  Prioridade := AnsiUpperCase(DBLookupComboBoxCodigoPrioridade.text);
  TipoManutencao := AnsiUpperCase(DBLookupComboBoxCodigoTipoManutencao.text);
  Status := AnsiUpperCase(DBLookupComboBoxCodigoStatus.text);

  with DataModuleManut.IBQueryOrdemServico do
  begin
    close;
    Sql.Clear;
    Sql.Add(´SELECT * FROM OrdemServico´);
    Sql.Add(´WHERE UPPER(CodOrdemServico) LIKE :CodOrdemServico´);
    Sql.Add(´AND UPPER(DescricaoOrdemServico) LIKE :DescricaoOrdemServico´);
    Sql.Add(´AND UPPER(CodEmpresa) LIKE :CodEmpresa´);
    Sql.Add(´AND UPPER(CodPrioridade) LIKE :CodPrioridade´);
    Sql.Add(´AND UPPER(CodTipoManutencao) LIKE :CodTipoManutencao´);
    Sql.Add(´AND UPPER(CodStatus) LIKE :CodStatus´);
    Sql.Add(´AND DATA BETWEEN :DATAINICIAL AND :DATAFINAL´);

    ParamByName(´CodOrdemServico´).AsString := ´¬´+ CodigoOS + ´¬´;
    ParamByName(´DescricaoOrdemServico´).AsString := ´¬´+ DescricaoOS +´¬´;
    ParamByName(´CodEmpresa´).AsString := ´¬´+ Empresa +´¬´;
    ParamByName(´CodPrioridade´).AsString := ´¬´+ Prioridade +´¬´;
    ParamByName(´CodTipoManutencao´).AsString := ´¬´+ TipoManutencao +´¬´;
    ParamByName(´CodStatus´).AsString := ´¬´+ Status +´¬´;
    ParamByName(´DataInicial´).AsDate := DateTimePickerDataInicio.Date;
    ParamByName(´DataFinal´).AsDate := DateTimePickerDataFinal.Date;
    Open;

    if IsEmpty then
      ShowMessage(´Nenhum registro foi localizado.´);
  end;
end;



GOSTEI 0
Joao1313

Joao1313

26/11/2007

Obrigado Emerson, deu certo.

Abraços
Joao


GOSTEI 0
Joao1313

Joao1313

26/11/2007

Agora deu outro problema, na verdade ja tinha mas eu nao
percebia. É que o like pega caracteres da frente ou de traz e/ou,
exemplo: seleciono 1 na pesquisa retorna 101, 10, 1,etc, ou seja
tudo que tem 1 na frente ou atraz. Do jeito que fiz que esta abaixo,
seleciona certo se peco 1 vem somente 1. mas nao seleciona todos
se nao digito uma selecao, e nem seleciona mais por data.

procedure TFormRelatorioOrdemServicoItem.ButtonPesquisaClick
(Sender: TObject);
var
CodigoOSItem, CodigoOS, SubConjunto, Defeito, Causa,
Providencia, TipoProblema, Mantenedor, Status: String;
begin
CodigoOSItem := AnsiUpperCase(EditCodigoOrdemServicoItem.Text);
CodigoOS := AnsiUpperCase(DBLookupComboBoxCodigoOrdemServico.text);
SubConjunto := AnsiUpperCase(DBLookupComboBoxCodigoSubConjunto.text);
Defeito := AnsiUpperCase(DBLookupComboBoxCodigoDefeito.text);
Causa := AnsiUpperCase(DBLookupComboBoxCodigoCausa.text);
Providencia := AnsiUpperCase(DBLookupComboBoxCodigoProvidencia.text);
TipoProblema := AnsiUpperCase(DBLookupComboBoxTipoProblema.text);
Mantenedor := AnsiUpperCase(DBLookupComboBoxCodigoMantenedor.text);
Status := AnsiUpperCase(DBLookupComboBoxCodigoStatus.text);
with DataModuleManut.IBQueryOrdemServicoItem do
begin
close;
Sql.Clear;
Sql.Add(´SELECT * FROM OrdemServicoItem´);
Sql.Add(´WHERE (CodItem) = :CodItem´);
Sql.Add(´or (CodOrdemServico) = :CodOrdemServico´);
Sql.Add(´or (CodSubConjunto) = :CodSubConjunto´);
Sql.Add(´or (CodDefeito) = :CodDefeito´);
Sql.Add(´or (CodCausa) = :CodCausa´);
Sql.Add(´or (CodProvidencia) = :CodProvidencia´);
Sql.Add(´or (CodTipoProblema) = :CodTipoProblema´);
Sql.Add(´or (CodMantenedor) = :CodMantenedor´);
Sql.Add(´or (CodStatus) = :CodStatus´);
Sql.Add(´and DATADAOSITEM BETWEEN :DATAINICIAL AND :DATAFINAL´);

ParamByName(´CodItem´).AsString := CodigoOSItem ;
ParamByName(´CodOrdemServico´).AsString := CodigoOS ;
ParamByName(´CodSubConjunto´).AsString := SubConjunto ;
ParamByName(´CodDefeito´).AsString := Defeito ;
ParamByName(´CodCausa´).AsString := Causa ;
ParamByName(´CodProvidencia´).AsString := Providencia ;
ParamByName(´CodTipoProblema´).AsString := TipoProblema ;
ParamByName(´CodMantenedor´).AsString := Mantenedor ;
ParamByName(´CodStatus´).AsString := Status ;

ParamByName(´DataInicial´).AsDate := DateTimePickerDataInicio.Date;
ParamByName(´DataFinal´).AsDate := DateTimePickerDataFinal.Date;
Open;
if IsEmpty then
ShowMessage(´Nenhum registro foi localizado.´);
end;
end;


Abraços
Joao


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/11/2007

creio ter faltado apenas um parêntesis:

procedure TFormRelatorioOrdemServicoItem.ButtonPesquisaClick
(Sender: TObject);
var
  CodigoOSItem, CodigoOS, SubConjunto, Defeito, Causa,
  Providencia, TipoProblema, Mantenedor, Status: String;
begin
  CodigoOSItem := AnsiUpperCase(EditCodigoOrdemServicoItem.Text);
  CodigoOS := AnsiUpperCase(DBLookupComboBoxCodigoOrdemServico.text);
  SubConjunto := AnsiUpperCase(DBLookupComboBoxCodigoSubConjunto.text);
  Defeito := AnsiUpperCase(DBLookupComboBoxCodigoDefeito.text);
  Causa := AnsiUpperCase(DBLookupComboBoxCodigoCausa.text);
  Providencia := AnsiUpperCase(DBLookupComboBoxCodigoProvidencia.text);
  TipoProblema := AnsiUpperCase(DBLookupComboBoxTipoProblema.text);
  Mantenedor := AnsiUpperCase(DBLookupComboBoxCodigoMantenedor.text);
  Status := AnsiUpperCase(DBLookupComboBoxCodigoStatus.text);

  with DataModuleManut.IBQueryOrdemServicoItem do
  begin
    close;
    Sql.Clear;
    Sql.Add(´SELECT * FROM OrdemServicoItem´);
    Sql.Add(´WHERE ( (CodItem) = :CodItem´); // *** abri o parêntesis ***
    Sql.Add(´or (CodOrdemServico) = :CodOrdemServico´);
    Sql.Add(´or (CodSubConjunto) = :CodSubConjunto´);
    Sql.Add(´or (CodDefeito) = :CodDefeito´);
    Sql.Add(´or (CodCausa) = :CodCausa´);
    Sql.Add(´or (CodProvidencia) = :CodProvidencia´);
    Sql.Add(´or (CodTipoProblema) = :CodTipoProblema´);
    Sql.Add(´or (CodMantenedor) = :CodMantenedor´);
    Sql.Add(´or (CodStatus) = :CodStatus )´); // *** fechei o parêntesis ***
    Sql.Add(´and DATADAOSITEM BETWEEN :DATAINICIAL AND :DATAFINAL´);

    ParamByName(´CodItem´).AsString := CodigoOSItem ;
    ParamByName(´CodOrdemServico´).AsString := CodigoOS ;
    ParamByName(´CodSubConjunto´).AsString := SubConjunto ;
    ParamByName(´CodDefeito´).AsString := Defeito ;
    ParamByName(´CodCausa´).AsString := Causa ;
    ParamByName(´CodProvidencia´).AsString := Providencia ;
    ParamByName(´CodTipoProblema´).AsString := TipoProblema ;
    ParamByName(´CodMantenedor´).AsString := Mantenedor ;
    ParamByName(´CodStatus´).AsString := Status ;
    ParamByName(´DataInicial´).AsDate := DateTimePickerDataInicio.Date;
    ParamByName(´DataFinal´).AsDate := DateTimePickerDataFinal.Date;

    Open;

    if IsEmpty then
      ShowMessage(´Nenhum registro foi localizado.´);
  end;
end;



GOSTEI 0
Joao1313

Joao1313

26/11/2007

Show de bola Emerson, só faltou: quando nao faço
selesao nem uma deveria vir todos os registros, era
assim que funcionava, agora da aquela mensagem...

Abraços
Joao


GOSTEI 0
POSTAR