Atualizar Banco (ClientDataset)

Delphi

19/10/2005

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

Curtidas 0

Respostas

Bruno Belchior

Bruno Belchior

19/10/2005

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;



GOSTEI 0
Chmelo

Chmelo

19/10/2005

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...


GOSTEI 0
Bruno Belchior

Bruno Belchior

19/10/2005

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...


GOSTEI 0
Chmelo

Chmelo

19/10/2005

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 +


GOSTEI 0
Bruno Belchior

Bruno Belchior

19/10/2005

[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...


GOSTEI 0
Chmelo

Chmelo

19/10/2005

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 ?


GOSTEI 0
Bruno Belchior

Bruno Belchior

19/10/2005

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...


GOSTEI 0
Chmelo

Chmelo

19/10/2005

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 +


GOSTEI 0
Bruno Belchior

Bruno Belchior

19/10/2005

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...


GOSTEI 0
Chmelo

Chmelo

19/10/2005

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..


GOSTEI 0
Bruno Belchior

Bruno Belchior

19/10/2005

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?


GOSTEI 0
Chmelo

Chmelo

19/10/2005

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 ..


GOSTEI 0
Chmelo

Chmelo

19/10/2005

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 +


GOSTEI 0
POSTAR