GARANTIR DESCONTO

Fórum Preencher StringGrid #387510

29/09/2010

0

Bom dia, preciso fazer algo semelhante a esse link, porém gostaria de exibir todos os horários de 00:00 até 23:30 (30 em 30 minutos), e caso algum horário esteja preenchido exibir um campo determinado.

No exemplo do tópico, ele exibe apenas os horários preenchidos, eu gostaria de exibir todos (preenchidos e não preenchidos)

Alguem teria alguma idéia de como fazer?
Fábio Cruz

Fábio Cruz

Responder

Posts

29/09/2010

Wilson Junior

Faça uma consulta (SQL) dos seus horários, após faça um loop para incluir os horários (com o intervalo desejado), dentro do loop, para cada intervalo, faça um LOCATE na sua consulta, sendo assim, você irá incluir o horário do intervalo e se existir o registro você o inclui o conteúdo

Exemplo:
Horá  Conteúdo
----- --------
00:00
00:30
01:00
01:30 Paciente João     { Aqui o LOCATE encontrou }
02:00
02:30
03:00
03:30
04:00 Reunião           { Aqui o LOCATE encontrou }
...


Espero ter colaborado.
Responder

Gostei + 0

29/09/2010

Fábio Cruz

então para cada horário teria um locate na tabela?

Algo semelhante a isso?
While not Table.Eof do
begin 
  for i = 0 to i >= table.RecordCount 
  begin
    StringGrid1.Cells[0, i] := '0:00';
    if (StringGrid1.Cells[0, i] = TableHora.asstring) then
      StringGrid1.Cells[1, i] := TableAssunto.Asstring;
  ...


Obs: Coloquei table para simplificar, mas irei utilizar ClientDataSet
Responder

Gostei + 0

29/09/2010

Eriley Barbosa

Acho que é mais ou menos isso que você quer baseado no tópico que passou: procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
  hora: string;
begin
  hora := '23:30';
  //Preenche a primeira coluna com os horarios
  for i := 1 to 48 do
  begin
    hora := FormatDateTime('hh:mm',
    IncMinute(StrtoDateTime(FormatDateTime('hh:mm',StrToDateTime(hora))), 30));
     GradeEspera.Cells[0, i] := hora;
  end;
  while not qSalaEspera.Eof do
  begin
    for i := 1 to GradeEspera.RowCount - 1 do
    begin
      //Se a hora for igual a que esta na coluna lança na grade
      if Copy(qSalaEspera.FieldByName('HORA').AsString, 1, 5) = GradeEspera.Cells[0, i] then
      begin
        GradeEspera.Cells[1, i] := qSalaEspera.FieldByName('CLIENTE').AsString + ' (' +
                               qSalaEspera.FieldByName('ANIMAL').AsString + ') - ' +
                               qSalaEspera.FieldByName('SIGLA').AsString +
                               qSalaEspera.FieldByName('FUNCIONARIO').AsString;
        //Abandona o laço
        Break;
      end;
    end;
    //Vai para o proximo registro
    Next;
  end;
  }
end;
Responder

Gostei + 0

29/09/2010

Wilson Junior

Seria algo mais ou menos assim
Const
  INTERVALO = '00:30:00';
var
  Hora: TTime;
  Linha: integer;
begin
  { Primeira linha para o título e a segunda linha em branco }
  StringGrid1.RowCount := 2;

  Linha := 1;
  Hora := StrToTime( '00:00:00' );
  while Hora <= StrToTime( '23:59:59' ) do
  begin
    StringGrid1.Cells[0, Linha] := TimeToStr( Hora );
    if  ClientDataSet.Locate( 'CampoHora', Hora, [] ) then
        StringGrid1.Cells[1, Linha] := ClientDataSet.FieldByName('CampoConteudo').AsString
    ;
    
    Hora := Hora + StrToTime( INTERVALO );
    Inc( Linha );
    StringGrid1.RowCount := Linha;
  end;
end;


Espero ter colaborado.
Responder

Gostei + 0

29/09/2010

Eriley Barbosa

Só para constar, no meu exemplo eu coloquei colcount =2 e rowcount = 49.
Responder

Gostei + 0

29/09/2010

Fábio Cruz

Vou verificar e qualquer coisa posto aqui.

Obrigado.
Responder

Gostei + 0

29/09/2010

Fábio Cruz

Muito obrigado ao Eriley e ao Wilson, ambos códigos chegaram ao resultado.

Muito Obrigado.
Responder

Gostei + 0

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

Aceitar