Consultar Entre duas Datas - utilizando os compontes IBX

Firebird

31/01/2004

E o seguinte estava utilizando o componete TQuery para ligar minha tabela ao banco de dados, e utilizava da seguinte forma para consultar duas datas diventes

TQuery.Close;
TQuery.Clear;
TQuery.add(´Select * from Tabela´);
TQuery.add(´Where Codigo = ´+EdCodigo.Text´ and DataEntrada >=´+edDataInicio.Text+´ and DataEntrada <=´+edDataFinal´´);
TQuery.Open;

Estava funcionando perfeitamente com este componente, mas quando mudei para o IBQuery não funcionou.

Alguem pode me ajudar.


Sdph

Sdph

Curtidas 0

Respostas

Afarias

Afarias

31/01/2004

|mudei para o IBQuery não funcionou.

Tenha em mente q é sempre mais fácil ajudar quando vc informar O Q NÃO FUNCIONOU e qual a MENSAGEM DE ERRO que apareceu -- a maioria dos usuários do fórum não conta com uma bola de cristal.

Vou dar uns chutes aqui::

TIBQuery.SQL.Add(´Select * from Tabela´);

note a propriedade SQL ...

e

|´Where Codigo = ´+EdCodigo.Text´ and DataEntrada
|>=´+edDataInicio.Text+´ and DataEntrada <=´+edDataFinal´´

A concatenação não está de acordo, e, não dá pra saber se vai funcionar pois não sei o formato da data nos Edits que vc está usando.



T+


GOSTEI 0
Sdph

Sdph

31/01/2004

O erro e o seguinte:

Project Controle.exe raised exception class EIBInterBaseError
With message ´Conversion erro from string ´01/02/2004´´, Process
stopped. Use Step or Run to Continue.

sera que e por que nos campos data coloco VarChar(12);

estranho e que utilizava este mesmo codigo com os mesmos campos e tipos no TQuery.


GOSTEI 0
Drakkar

Drakkar

31/01/2004

No firebird o separador de datas não é a / e sim um . (ponto)
então se voce quiser trabalhar com campos string e nao datetime tera que fazer uma funcao para trocar a / por um . (ponto) antes de adicionar a data na query. E também ta faltando a aspa simples antes e depois da data.

Então ficaria assim:

TQuery.Close;
TQuery.Clear;
TQuery.add(´Select * from Tabela´);
TQuery.add(´Where Codigo = ´+EdCodigo.Text+´ and DataEntrada >=´´´+TrocaBarra(edDataInicio.Text)+´´´ and DataEntrada <=´´´+TrocaBarra(edDataFinal.Text)+´´´´);
TQuery.Open;

É claro que isso vai da um trabalhão... seria melhor vc usar o campo do tipo datetime e passar as datas por parametros pegando o valor da data de um componente datetimepicker.


GOSTEI 0
Fabio.hc

Fabio.hc

31/01/2004

Quando vc cria um campo para armazenar data:

- Se vc criar como varchar. Quando for fazer pesquisa neste campo vai trazer resultado não esperado porque a pesquisa no campo varchar é da esquerda para a direita caracter por caracter.

- O ideal é criar campo como date(para data) ou timestamp(para data e hora).


GOSTEI 0
Afarias

Afarias

31/01/2004

Outras notas::

1- tanto varchar como date ou timestamp tem q ser passados no SQL entre aspas simples

2- alguns formatos de data válidos no Ib são::

´dd.mm.yyyy´
´mm/dd/yyyy´


ex::

Edit1.Text := ´30/01/2004´;
IBQuery1.SQL.Add(´select * from tabela´);

IBQuery1.SQL.Add(´where campo_data > ´´´ + Edit1.Text + ´´´´);
ou
IBQuery1.SQL.Add(´where campo_data > ´ + QuoteStr(Edit1.Text) );




T+


GOSTEI 0
POSTAR