• 0
Sign in to follow this  
Mario Lopes

(Resolvido) Comparar datas

Question

Boa tarde amigos

Porque o código seguinte não funciona para comprar datas. Isto é o resultado é nulo e não devia ser.

var data:Tdatetime;
var compoedata:string;
begin

compoedata:='01'+'-'+inttostr(combobox1.ItemIndex+1)+'-'+edit1.Text;
data:=strtodate(compoedata);
    //------------procurar apenas os contrato validos

Queryg.SQL.Clear;
Queryg.SQL.Add('SELECT *');
Queryg.SQL.Add('FROM contrato');
Queryg.SQL.Add('WHERE data_inicio>=:a' );
Queryg.SQL.Add('and data_fim <= :a');
queryg.Params[0].AsDate:=data;
queryg.Params[1].asdate:=data;
queryg.Open;

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

compoedata:='01'+'-'+inttostr(combobox1.ItemIndex+1)+'-'+edit1.Text;

data:=strtodate(compoedata);

vamos supor que sua data seja

data := '01-01-2012' // isso dependendo do banco de dados poderia ser '01/01/2012'

se data tem o mesmo valor, ao executar a sql, os registros retornariam somente no intervalo de 1 dia ( ou seja, na mesma data )

Queryg.SQL.Clear;
Queryg.SQL.Add('SELECT *');
Queryg.SQL.Add('FROM contrato');
Queryg.SQL.Add('WHERE data_inicio>=:data1' );
Queryg.SQL.Add('and data_fim <= :data2');
queryg.Params[0].AsDate:=data;
queryg.Params[1].asdate:=data;
queryg.Open;
se quiser um intervalo maior deveria ser
Queryg.SQL.Clear;
Queryg.SQL.Add('SELECT *');
Queryg.SQL.Add('FROM contrato');
Queryg.SQL.Add('WHERE data_inicio>=:data1' );
Queryg.SQL.Add('and data_fim <= :data2');
queryg.Params[0].AsDate:=data;
queryg.Params[1].asdate:=data + 30; // data inicial + 30 dias
queryg.Open;

OBS: Procure não usar o mesmo nome para os parametros

abraço

Share this post


Link to post
Share on other sites
  • 0
compoedata:='01'+'-'+inttostr(combobox1.ItemIndex+1)+'-'+edit1.Text;

data:=strtodate(compoedata);

vamos supor que sua data seja

data := '01-01-2012' // isso dependendo do banco de dados poderia ser '01/01/2012'

se data tem o mesmo valor, ao executar a sql, os registros retornariam somente no intervalo de 1 dia ( ou seja, na mesma data )

Queryg.SQL.Clear;
Queryg.SQL.Add('SELECT *');
Queryg.SQL.Add('FROM contrato');
Queryg.SQL.Add('WHERE data_inicio>=:data1' );
Queryg.SQL.Add('and data_fim <= :data2');
queryg.Params[0].AsDate:=data;
queryg.Params[1].asdate:=data;
queryg.Open;
se quiser um intervalo maior deveria ser
Queryg.SQL.Clear;
Queryg.SQL.Add('SELECT *');
Queryg.SQL.Add('FROM contrato');
Queryg.SQL.Add('WHERE data_inicio>=:data1' );
Queryg.SQL.Add('and data_fim <= :data2');
queryg.Params[0].AsDate:=data;
queryg.Params[1].asdate:=data + 30; // data inicial + 30 dias
queryg.Open;

OBS: Procure não usar o mesmo nome para os parametros

abraço

Ok Jhonas

Peço desculpa, a sua resposta diz tudo. Pura e simples distracção minha.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this