Ir para conteúdo

POWERED BY:

Arquivado

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

Pablo AG

Comparar datas

Recommended Posts

Bom Pessoal, na verdade tenho dois problemas.

 

O primeiro é o sequinte:

Quero comparar a data de entrega de um pedido com a data do dia (data do sistema) e mostrar em um Edit a quantidade de pedidos em atraso, mas esta dando erro na comparação das datas.

Estou fazendo assim:

 

// FAZER SOMA DA QUANTIDADE DE PEDIDOS EM ATRASOif (modulo2.cds_PedidosDATA_ENTREGA > Date) then  edtAtraso.Text := FloatToStr(grdTransp.DataSource.DataSet.RecordCount);

 

O segundo é o seguinte:

Estou fazendo uma função SQL para mostrar a soma dos produtos em uma determinada seleção, mas o que me aparece no Edit é a própria função.

 

// FAZER SOMA DE PRODUTOS REFERENTES AOS PEDIDOS SELECIONADOSsqlQtdProduto.Close;sqlQtdProduto.SQL.Clear;sqlQtdProduto.SQL.Add('select sum(qtde_pecas) from pedidos');sqlQtdProduto.ExecSQL;edtProdutos.Text := sqlQtdProduto.SQL.Text;

 

Agradeço desde já

Pablo Aguillar

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom vamos la... primeiro problema.... não sei qual o erro que ta dando mas assim deve resolver...

declara a unit DateUtils ai faz assim...

// FAZER SOMA DA QUANTIDADE DE PEDIDOS EM ATRASOif (modulo2.cds_PedidosDATA_ENTREGA.value > Date) then  edtAtraso.Text := IntToStr(DaysBetween(modulo2.cds_PedidosDATA_ENTREGA.Value, date));
não precisa ser float pq vai ser um inteiro sempre entre datas... essa funçao ali vai te retornar um inteiro...

 

ja a segunda... só o final dela ta errado... se você atribuir o sql.text ele vai te dar o comando sql q tem dentro da qrry... se você quer pegar o valor você faz assim... so vou atribuir um nome ao campo...

 

sqlQtdProduto.Close;sqlQtdProduto.SQL.Clear;sqlQtdProduto.SQL.Add('select sum(qtde_pecas) as quantidade from pedidos');sqlQtdProduto.ExecSQL;edtProdutos.Text := sqlQtdProdutoQuantidade.AsString;// ou ainda//edtProdutos.Text := sqlQtdProduto.Fields.FieldByName('Quantidade').AsString; no caso de você ta usando ADO, se for BDE é sem o Fields... se eu não me engano!  :natalbiggrin:
qualquer coisa... posta ai que a galera ajuda!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bastard2003 obrigado novamente pelo Guia D7 e pelas ajuda no post.

 

Bem, a função para executar o Query deu tudo Ok, que mico heim ....hehehe ... um dia eu chego lá, mas a comparação das datas para pegar a quantidade de pedidos em atraso não esta calculando corretamente.

Ex. Fiz um filtro dos meus pedidos de Amostra, peguei 104 pedidos, nos quais 28 estão em atraso e ele me mostra somente que 14 estão em atraso.

 

Se tiver uma dica pra fazer com Query (SQL) ou outra forma agradeço tb ....

 

Abraço

Pablo Aguillar

 

PS. if (modulo2.cds_PedidosDATA_ENTREGA.value > Date) then

o correto é ..... if (modulo2.cds_PedidosDATA_ENTREGA.value < Date) then

Compartilhar este post


Link para o post
Compartilhar em outros sites

nem esquenta veio.... isso acontec.. ehehhe... viu... eu tb errei ali!! hehehe.... errar é humano... e é errando que se aprende! hehehe

cara... a questão do sql... tu teria q me disser qual banco você ta usando.. pq cada banco tem uma maneira de tratar datas... mas acho que um sql simples do tipo...

select count(DATA_ENTREGA) as quantidade from pedido where DATA_ENTREGA < :data

ai tu passa pra esse parametro ali a data atual...

 

qualquer coisa.. chama ai!

 

Abraços e sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bastard2003, o bco que estou usando é o firebird

 

Fiz assim o que me mandou no post,

 

// FAZER SOMA DA QUANTIDADE DE PEDIDOS EM ATRASOsqlPedAtraso.Params[00].Value := Date;sqlPedAtraso.Close;sqlPedAtraso.SQL.Clear;sqlPedAtraso.SQL.Add('select count(DATA_ENTREGA) as quantidade from pedidos where DATA_ENTREGA < :DATA');sqlPedAtraso.ExecSQL;edtAtraso.Text := sqlPedAtrasoQUANTIDADE.AsString;

add o parametro data do tipo ftDate, mas esta dizendo

 

"No value for parameter 'DATA' "

 

A forma que atribui a data esta correta ?

 

fiz desta forma para ver se estava recebendo a data atual corretamente e esta tudo OK

 

sqlPedAtraso.Params[00].Value := Date;edtAtraso.Text := sqlPedAtraso.Params[00].Value;

Aiaiaiaiai heim ...... o cara aqui só da trabalho ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

nem esquenta veio.. tamo aqui pra se ajudar mesmo...

 

faz assim:

 

with sqlPedAtraso do	begin	Close;	ParamByName('Data').Value := Date; 	Open;	end;

sendo que a tua qry vai ter como sql

select count(DATA_ENTREGA) as quantidade from pedidos where DATA_ENTREGA < :DATA

duas dicas... como o sql vai ser fixo... so vai mudar a data... tu não precisa ficar passando ele de novo.. basta passar o valor do parametro e pronto.. sempre com a qry fechada....

 

outra... usa ExecSQL, so pra insert, update, drop, create, etc... essas coisas... literalemente os que vão afetas "modificações" na base... pra select tu passa open mesmo...

 

testa ai.. qualquer coisa... prega o grito!

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.