Fórum Atualizar Banco (ClientDataset) #299955

19/10/2005

0

Ola pessoal,

meu problema e o seguinte:

Tenho um grid que controla os pedidos de uma pizzaria e neste grid tenho um campo com Hora_prev_entrega, gostaria que quando este pedido ultrapassar 30 min ele seja pintado de outra cor no grid , isto ira mostrar que pedido ja esta a mais de 30 min na cozinha..

1 - Como posso atualizar as informacoes a cada 5 minutos.
2 - Pode usar o Timer para fazer isto.
3 - Como atualizar o grid , estou usando o ClientDataset. (close\open\refresh)
4 - Como pintar o pedido(Grid) de cor diferente se ultrapassou os 30 minutos.

estou usando Delphi 7 e FB 1.5

valeu pessoal..

ate +


Chmelo

Chmelo

Responder

Posts

19/10/2005

Bruno Belchior

acho q não se faz nem necessário atualizar o grid a cada 5 min... porque seria muito difícil passar esse tempo com o sistema aberto sem repintar a grid... (mas de qualquer forma é possível fazer isso usando um TTimer)... mas o seguinte código no evento OnDrawColumnCell pode pintar
if Column.Field = DtStHoraPedito then
begin
  if MinuteOf(Now - DtStHoraPedito.AsDateTime) >= 30 then
  begin
    DBGrid1.Canvas.Font.Color := clBlue; 
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;



Responder

Gostei + 0

19/10/2005

Chmelo

Caro Bruno,

obrigado pela atencao, o grid ate que eu consigo pintar , mas o maior problema e que gostaria de atualizar estes pedidos que estao a mais de 30 minutos na cozinha, e por isso que eu preciso atualizar o grid , para poder ver qual o pedido que esta demorando para ser entregue na mesa do cliente.

valeu...


Responder

Gostei + 0

19/10/2005

Bruno Belchior

correto... mas você poderia colocar aquele código, no caso possuindo um campo (DateTime) da data e hora de pedido, comparando assim a cada minuto... ou a cada repintagem do grid...


Responder

Gostei + 0

19/10/2005

Chmelo

Correto...

Mas nao sei como posso implementar esta rotina para ele poder checar a cada n minutos se o pedido esta ou nao atrasado...

ate +


Responder

Gostei + 0

19/10/2005

Bruno Belchior

[quote:a4d46054ea=´Bruno Belchior´]if MinuteOf(Now - DtStHoraPedito.AsDateTime) >= 30 then[/quote:a4d46054ea]Essa linha do código faz isso, compara a data atual (now) com a gravada no DataSet... (DtStHoraPedito)... e verifica se tem até 30 minutos ou mais...


Responder

Gostei + 0

19/10/2005

Chmelo

esta linha voce esta colocando dentro do DBGrid1DrawColumnCell certo ?

Mas como faco para ele atualizar o DBGrid1DrawColumnCell !!!

Tenho que usar o Timer para fazer isto ?


Responder

Gostei + 0

19/10/2005

Bruno Belchior

Pode ser... dentro do evento OnTimer você chama a seguinte linha...
DBGrid1.Refresh
Mas como eu disse anteriormente, acho q nem será necessário, pois só de mover o formulário ou minimizar a aplicação o Grid será repintado...


Responder

Gostei + 0

19/10/2005

Chmelo

Valeu Bruno,

Agora preciso verificar o porque nao esta sendo repintado o grid apos dar o refresh no grid...

OBs.: quando e dado o refresh no grid ele automaticamente executa o comando do DBGrid1DrawColumnCell automaticamente ??

obrigado pela ajuda..

ate +


Responder

Gostei + 0

19/10/2005

Bruno Belchior

if Column.Field = DtStHoraPedito then 
begin 
  if MinuteOf(Now - DtStHoraPedito.AsDateTime) >= 30 then 
  begin 
    DBGrid1.Canvas.Font.Color := clBlue; 
  end; 
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
end;
Mude o código para esse, e ao invés de chamar um Refresh... chame um Repaint ou Invalidate...


Responder

Gostei + 0

19/10/2005

Chmelo

Bruno,

Esta funcionando , so que quando o timer e executado ele nao esta conseguindo mudar a cor do grid, mesmo com este novos comandos que voce me paasou...

valeu..


Responder

Gostei + 0

20/10/2005

Bruno Belchior

A cor do grid realmente não mudará, apenas a cor da fonte... mas depurando a aplicação passou na linha de atribuição de cor?


Responder

Gostei + 0

20/10/2005

Chmelo

Ola Bruno,

O que esta acontecendo e o seguinte:

- Apos dar o tempo no timer a linha que deveria ser pintada nao esta sendo , pois o comando Repaint ou invalidate nao esta funcionando dentro do timer.

Ex.: tenho um horario 19:30:00, o horario do micro marca 20:01:00, gostaria que a cor da celula do grid que esta com o pedido ja atrasado mudasse de cor mas o apos o timer checar nao esta mudando a cor.

valeu ..


Responder

Gostei + 0

20/10/2005

Chmelo

Bruno,

Valeu pelas dicas, esta funcionando legal, o grid nao estava mudando pq
eu nao estava atualizando uma variavel de hora dentro do timer...

obrigado..

ate +


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar