Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexftorres

Converter campo string em data de uma base dbf

Recommended Posts

Bom dia,

 

tenho uma base dbf onde tenho um campo de data em formato string(character 10).

 

Estava tentando fazer uma busca entre datas usando esse campo da seguinte forma:

 

Query1.Sql.Add('select * from cadmov where Data Between :dt1 and :dt2 and TT = :tt'); 

 

Quando faço :

Query1.Sql.Add('select * from cadmov where Data = :dt1' and TT = :tt');

, funciona porque ele pega literalmente a string do campo e faz a busca.

 

Consegui uma resposta parcial usando :

'from cadmov where (cast(Data as date) between :dt1 and :dt2) and TT = :tt');

 

Numa busca por exemplo do dia 01/03/2011 a 31/03/2011 ele me retorna

registros com data de 03/02/2011(fevereiro), ai que ta o problema.

 

Agradeço qualquer ajuda,

 

Alexandre Torres

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema parece estar relacionado a forma como o cast tá funcionado. acredito que o cast que você está fazendo está colocando a data no padrão americano MMDDAAAA.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta.

 

Um amigo pediu pra fazer assim :

 

sql.add('select *from receita WHERE datainicial between #'+formatdatetime('yyyy-mm-dd',DateTimePicker1.Date)+'# AND  #'+formatdatetime('yyyy-mm-dd',DateTimePicker2.date)+'# order by datainicial');

 

mas dessa forma recebo esse erro : exception message : Invalid use of keyword. Token: #2011-03-01# Line Number: 1.

Já tentei mudar o formato para yyyy/mm/dd, tentei tambem mm/dd/yyyy, mas nada deu jeito.

 

Agradeco a ajuda.

 

Alexandre Torres

Compartilhar este post


Link para o post
Compartilhar em outros sites

sem as barras não funciona?

sql.add('select *from receita WHERE datainicial between #'+formatdatetime('yyyymmdd', DateTimePicker1.Date)+'# AND  #'+formatdatetime('yyyymmdd', DateTimePicker2.date)+'# order by datainicial');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou postar aqui o código da rotina e logo abaixo como esta o banco, frisando que esse banco não fui eu quem criou, estou simplesmente pegando um banco que ja roda em um cliente e desenvolvendo um programinha para ajuda-los.

 

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 Total : Real;

begin
Query1.Close;
Query1.SQL.Clear;

Query1.Sql.Add('select TT, data, VALES, NUMVALE, VALE, ORDEM, DESCONTO '+
//                 'from cadmov where (cast(Data as date) between :dt1 and :dt2) and TT = :tt');
'from cadmov where data #'+formatdatetime('yyyymmdd',DateTimePicker1.Date)+'# '+
'AND #'+formatdatetime('yyyymmdd',DateTimePicker2.date)+'#  AND TT = :tt order by data');



//Query1.ParamByName('dt1').asDate := JvDateEdit1.Date;
//Query1.ParamByName('dt2').AsDate := JvDateEdit2.date;

Query1.ParamByName('tt').AsInteger := Strtoint(Edit1.Text);

Query1.Open;


Total := 0;


 Query1.First;
 while (not Query1.Eof) do begin
   Total:= Total + Query1Total.Value;

   Query1.Next;
 end;

 label4.Caption := FloatToStr(Total);
end;

 

 

Estrutura do banco

DATA CHARACTER 10

TT NUMERIC 3

VALES NUMERIC 8,2

NUMVALE NUMERIC 8

VALE NUMERIC 8,2

ORDEM NUMERIC 6

DESCONTO NUMERIC 3

 

 

Desde já agradeço sua paciência em me ajudar.

 

 

Alexandre Torres

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.