Ir para conteúdo
Fórum Script Brasil
  • 0

Incremetar Minutos A Hora


DELPHI-Man32

Pergunta

SALVE DELPHIANOS, OI EU AI DE VOLTA A COMUNIDADE!

Bom, estou desenvolvendo um sistema de consultas médicos e queria que fosse possivel gerar uma agenda para cada dia da semema da seguinte maneira!

campos da tabela AGENDAS.

ID, DATA, HORA, STATUS, IMAGEM

então o operador não cadastraria mas gerasse automaicamente uma agenda para uma quantidade de dias.

ex. hoje é: 6/1/2007. o operador define um intervalo de minutos entre as consultas. ex. 15 minutos. então se o plantao começa às 8:00, as consultas teriam um intervalo de 15 minutos. ai o operador geraria uma agenda para o dia! determinando quantos atentimentos por dia.

bastaria entrar no cadastroe clicar em um botao para gerar a agenda!

teria apenas 2 edits,um para informar o intervalo em minutos e outro para a quantidade de horários para o dia.

para ficar mais claro vou colocar mais um exemplo.

Horários: 10 - Intervalor: 00:15

quando gerar...

ID - DATA - HORA - STATUS

1 - 06/01- 08:00 - L

2 - 06/01- 08:15 - L

3 - 06/01- 08:30 - L

4 - 06/01- 08:45 - L

5 - 06/01- 09:00 - L

6 - 06/01- 09:15 - L

7 - 06/01- 09:30 - L

8 - 06/01- 09:45 - L

9 - 06/01- 10:00 - L

10 - 06/01- 10:15 - L

onde L é um status 'livre'

colocarei isso num dbgrid com imagens para status. essa parte não é problema.

ate mais.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
teria apenas 2 edits,um para informar o intervalo em minutos e outro para a quantidade de horários para o dia.
DELPHI-Man32, acho que além destas duas informações, talvez fosse interessante informar a hora de início dos agendamentos.

O processo é simples, já que você terá um loop em função da quantidade de horários e irá incrementar a hora no tempo informado.

var
  HoraAgenda,
  IntervTempo :TDateTime;
  QtdHorarios :Integer;
begin
  HoraAgenda := Date +StrToTime(edHoraDeInicio.Text); // data (dia em questão) e hora do 1º agendamento
  QtdHorarios := StrToInt(edQuantidadeHorarios.Text);  // agendamentos por dia
  IntervTempo := StrToTime(edIntervaloTempo.Text);  // tempo entre agendamentos
  while QtdHorarios > 0 do
  begin
    tabAgenda.Append;
    tabAgendaDATA.Value := Int(HoraAgenda);  // move data da agenda para o registro
    tabAgendaHORA.Value := Frac(HoraAgenda);  // move hora da agenda para o registro
    ...
    tabAgenda.Post;
    HoraAgenda := HoraAgenda +IntervTempo;
    Dec(QtdHorarios);
  end;

Algo mais ou menos assim. Não esqueça de validar os campos dos edit's antes de utilizá-los.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

tava fazendo algo parecido, mas acho que tinha algo no lugar errado no loop, estava fazendo com for e não com while.

mas vou testar e depois volto,ate mais.

abraço!

for ou while, ambos podem ser utilizados. Observe apenas que a 1º hora agendada não deve ter o horário incrementado, então você o incrementa após adicioná-lo na tabela.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

 
procedure Tfrm_geraagendas.bt_gerarClick(Sender: TObject);
var
  HoraAgenda, IntervTempo : TDateTime;
  QtdHorarios :Integer;
begin
  DMBanco.TBAgendas.Active := True;
  HoraAgenda  := StrToTime(Agora.Text);
  QtdHorarios := StrToInt(QdtHorario.Text);
  IntervTempo := StrToTime(Intervalo.Text);
  while QtdHorarios > 0 do
  begin
    DMBanco.TBAgendas.Append;
    DMBanco.TBAgendasID_AGE.Value := QtdHorarios;
    DMBanco.TBAgendasDATA.Value   := StrToDate(Hoje.Text);
    DMBanco.TBAgendasHORA.Value   := TimeToStr(HoraAgenda);
    DMBanco.TBAgendasSTATUS.Value := 'L';
    DMBanco.TBAgendas.Post;
    HoraAgenda := HoraAgenda + IntervTempo;
    Dec(QtdHorarios);
  end;
end;

amigo, dei uma pequena mudada mas funcionou. O problema agora é com a chave primaria da tabela, já que na primeira 'gerada' o ultimo número foi '32', se mandar gerar de novo, vai repetir tudo! tenho agora eu acho que pegar o maior valor da PK e incrementar juntamente com a quantidade de horarios. tem alguma sugestão?

outra coisa, o primeiro registro da tabela ficou com o maior hora gerada: 15:45 e o ultimo registro ficou com a hora inicial: 08:00

ate mais

VAGNER

mf_vagner@hotmail.com

Link para o comentário
Compartilhar em outros sites

  • 0

bom, consegui o que eu queria, como havia falado Micheus, usei uma query para incrementar.

está i o cod para quem quiser usar ou melhorar.

procedure Tfrm_geraagendas.bt_gerarClick(Sender: TObject);
var
  HoraAgenda, IntervTempo : TDateTime;
  QtdHorarios, max, conta : Integer;
begin
  DMBanco.TBAgendas.Active := True;
  HoraAgenda  := StrToTime(Agora.Text);
  QtdHorarios := StrToInt(QdtHorario.Text);
  IntervTempo := StrToTime(Intervalo.Text);
  with QryIncremento do
  begin
  close;
  open;
  max := QryIncremento.Fields[0].AsInteger;
  conta := max + 1;
  while QtdHorarios > 0 do
  begin
    DMBanco.TBAgendas.Append;
    DMBanco.TBAgendasID_AGE.Value := conta;
    DMBanco.TBAgendasDATA.Value   := StrToDate(Hoje.Text);
    DMBanco.TBAgendasHORA.Value   := TimeToStr(HoraAgenda);
    DMBanco.TBAgendasSTATUS.Value := 'L';
    DMBanco.TBAgendas.Post;
    HoraAgenda := HoraAgenda + IntervTempo;
    Dec(QtdHorarios);
    conta := conta + 1;
  end;
 end;
end;

desse meu jeito agora, não acontece mais o erro citado entes

"outra coisa, o primeiro registro da tabela ficou com o maior hora gerada: 15:45 e o ultimo registro ficou com a hora inicial: 08:00"

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

DELPHI-Man32, se você estiver utilizando a chave primária na tabela TBAgendas, que você citou ser um número seqüêncial, então você não precisaria utilizar a query auxiliar. Basta que você posicione no último registro da tabela:

begin
  HoraAgenda  := StrToTime(Agora.Text);
  QtdHorarios := StrToInt(QdtHorario.Text);
  IntervTempo := StrToTime(Intervalo.Text);
  DMBanco.TBAgendas.Active := True;
  DMBanco.TBAgendas.Last;
  conta := DMBanco.TBAgendasID_AGE.AsInteger +1;
  while QtdHorarios > 0 do
  begin
  ...

Entretanto, se houver a possibilidade de outro usuário, gerar esta agenda em outro computador no mesmo momento, então o mais correto seria obter o max (utilizando a query) a cada interação do loop, ou seja, colocá-lo dentro do loop while - evitando assim, a possibilidade de erro de duplicação de chave.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

cara amigo Micheus, foi a primeira coisa que pensei quando usei o max! porque estou analisando a possibilidade de colocar o sistema em rede para multiplos usuários! Eu seja! pode ocorrer de mais de uma pessoa gerar a agenda! dai a necessidade de pegar o maximo valor da tabela.

mais valeu pela atenção!

qualquer coisa posto de novo!

abraços amigo

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...