Problemas Com Geração De Horários capitulo 10
06/03/2006
0
No form tenho um edit com o dia inicial e outro com a data final e um combo que lista a sala de atendimento e um bitbtn com caption gerar horários.
Quando Testo em um MEMO antes de passar os códigos para o sistema conseguo gerar os horários, porem quando tenho que juntar com a informação da tabela AGENDA(CAMPOS: Tipo de atendimento, dia da semana, hora inicial, hora final, minutos) dá erro pois o sistema não calcula os horários por TIPO de atendimento.
Como Eu fasso para que o sistema gere os horários.
Desde já agradeço a quem me ajudar.
Exvasp
Posts
06/03/2006
Xandyr
Seja mais específico, pois eu não entendi direito o que vc quer fazer, quer inserir esses dados em uma tabela é isso, então é só fz um insert na tabela:
insert into tbl_agenda
(Tipo_de_atendimento, dia_da_semana, hora_inicial, hora_final, minutos))
Values(´Tipo de atendimento´, ´10/12/2005´, ´12:45´, ´13:45´)
06/03/2006
Rjun
Se você não descrever melhor o seu problema ficará dificil conseguir ajuda.
06/03/2006
Paullsoftware
como vc está fazendo no memo?
como vc está fazendo na hora do erro?
mostre o código, como está tentando fazer... :wink:
06/03/2006
Exvasp
Olá!!!
Em primeiro lugar desculpe por não ter conseguido explicar corretamente
vou tentar colocar da forma mais detalhada possivel:
Em segundo lugar não estou conseguindo fazer.
O meu problema é assim
Tenho duas tabelas no banco de dados:
AGENDA: Tabela onde já se encontram cadastrados os tipos de especies de atendimento com os campos:
CODIGO (Int) autoincremento
SALA_COD(int) Tenho salas cadastradas por código: 1, 4, 3 e 2
DIA_SEMANA_COD(int) possuo os dias cadastrados por código: 1(domingo), 2(segunda), 3(terça) e assim por diante até chegar sabado.
ESPECIE_ATENDIMENTO(int) possuo cadastrado por código: 1(clinica médica), 2(ortopedia) e assim por diante
HORA_INICIAL(smalldatetime) possuo cadastrado: 8:00:00, 10:00:00, 13:00:00 e 14:00:00
HORA_FINAL(smalldatetime) possuo cadastrado: 12:00:00, 12:00:00, 16:00:00 e 17:00:00
TEMPO_MINUTOS(smallint) possuo cadastrado os minutos por atendimento: 30, 40 e 50(para o sistema pegar a hora inicial e a hora final e gerar os horários com base nos minutos de intevalo de tempo.
AGENDAMENTO: Tabela para onde os horários de atendimento gerados vão ser armazenados e possui os campos:
Código(int) autoincremento
SALA_COD(Int) recebe a sala cadastrada na tabela anterior DIA_AGENDADO(smalldatetime) recebe o dia gerado pelo sistema por exemplo (10/03/2006) apartir da informação do código do dia(DIA_SEMANA_COD)(int) que se encontra informado na
tabela anterior
HORARIO_AGENDADO(smalldatetime) recebe a hora agendada com base no calculo gerado pelo sistema apartir da informação da tabela anterior por exemplo na tabela anterior tem o campo: SALA_COD(1), HORA_INICIAL(8:00:00), HORA_FINAL(12:00:00), TEMPO_MINUTOS(30), significa que o sistema tera que GERAR os horários de agendamento por exemplo SALA_COD(1) 8:00:00, 8:30:00, 9:00:00, 9:30:00, 10:00:00, 10:30:00, 11:00:00, 11:30:00, 12:00:00
Abaixo coloquei dessa forma para que o entedimento fique mais claro
Estado da TABELA AGENDAMENTO após clicar em gerar horários
SALA_COD - ESPECIE_ATENDIMENTO- DIA_AGENDADO - HORARIO_AGENDADO
1 ----------------------- 2(ortopedia)----------- 10/03/2006 ---------8:00:00
1 ----------------------- 2 ----------------------- 10/03/2006---------8:30:00
1 ----------------------- 2 ----------------------- 10/03/2006----------9:00:00
1------------------------ 2 ----------------------- 10/03/2006----------9:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------10:00:00
1------------------------ 2 ----------------------- 10/03/2006---------10:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------11:00:00
1------------------------ 2 ----------------------- 10/03/2006---------11:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------12:00:00
4 ----------------------- 1(clinica médica)------- 14/03/2006---------9:00:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:20:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:40:00
4------------------------ 1 ----------------------- 14/03/2006---------10:00:00
4------------------------ 1 ----------------------- 14/03/2006---------10:20:00
4------------------------ 1 ----------------------- 14/03/2006---------10:40:00
4------------------------ 1 ----------------------- 14/03/2006---------11:00:00
4------------------------ 1 ----------------------- 14/03/2006---------11:20:00
4------------------------ 1 ------------------------ 14/03/2006--------11:40:00
4------------------------ 1 ----------------------- 14/03/2006---------12:00:00
E assim por diante
No form tenho um Edit (data inicial) por exemplo:03/03/2006 e outro edit (data final) por exemplo: 12/03/2006 e um botão(gerar horários)
Como Eu fasso para que os sistema gere APENAS e dias e os respectivos horarios de atendimento com base nas informações
cadastradas na Tabela AGENDA para armazenar isso na tabela AGENDAMENTO.
Se alguem que ler tiver dúvida por favor poste pois quero tentar solucionar este problea
Agradeço muito, mas muito a todos que tentaram me ajudar a resolver esse problema
06/03/2006
Exvasp
Esse código foi o que tentei por ultimo colocando edits, de data inicial e final e hora inicial e final para testar, mas não consigo fazer.
//Retorna o dia da semana function DiaSemanaExt (Data: TDate): String; Const Dia: array [1..7] of String =(´Domingo´, ´Segunda-Feira´, ´Terça-Feira´, ´Quarta-Feira´, ´Quinta-Feira´, ´Sexta-Feira´, ´Sábado´); begin Result := Dia[DayofWeek (Data)]; end; function AnoBis (Ano: Integer): Boolean; var Resto: Integer; begin Resto := Ano mod 4; if Resto = 0 then Result := True //o ano é bissexto else Result := False;//o ano não é bissexto end; function DiasNoMes (Data: TDate): Integer; var Y, M, D: Word; Dias: Integer; begin Dias := 0; DecodeDate (Data, Y, M, D); //Especificando o número de dias de cada mês. if M = 1 then Dias := 31; if M = 2 then begin if AnoBis (Y) then Dias := 29 else Dias := 28; end; if M = 3 then Dias := 31; if M = 4 then Dias := 30; if M = 5 then Dias := 31; if M = 6 then Dias := 30; if M = 7 then Dias := 31; if M = 8 then Dias := 31; if M = 9 then Dias := 30; if M = 10 then Dias := 31; if M = 11 then Dias := 30; if M = 12 then Dias := 31; //Retornando o número do mês especificado. Result := Dias; end; function IncDia (Data: TDate; Valor: Integer): TDate; var A, M, D: Word; begin DecodeDate (Data, A, M, D); D := D + Valor; if D > DiasNoMes (Data) then begin D := 1; M := M+1; end; if M = 13 then begin M := 1; A := A +1; end; Result := StrToDate (FormatFloat (´00/´, D)+FormatFloat (´00/´, M)+IntToStr (A)); end; function IncMinuto (Hora: TTime; Valor: Integer): TTime; var H, M, S, Ms: Word; begin DecodeTime (Hora, H, M, S, Ms); M := M + Valor; if M = 60 then begin M := 0; H := H +1; end; if H = 24 then H := 0; Result := StrToTime (FormatFloat (´00:´,H)+FormatFloat (´00:´,M)+FormatFloat (´00´,S)); end; procedure TForm1.Button1Click(Sender: TObject); begin DataInicial := StrToDate(Edit1.Text); DataFinal := StrToDate(Edit3.Text); DataAtual := DataInicial; Memo1.Clear; while (DataAtual <= DataFinal) do begin HoraInicial := StrToTime(Edit2.Text); HoraFinal := StrToTime(Edit4.Text); HoraAtual := HoraInicial; while (HoraAtual <= HoraFinal) do begin {::::::::::::::::::::::CÓDIGO PARA GRAVAÇÃO::::::::::::::::::::::::::::::::::::} With ClientDataSet1 do begin close; CommandText:=Memo3.Text; Open; First; ClientDataSet2.first; Dataminuto := ClientDataSet2MD_AG_MEDI_TEMP_MED.AsInteger; While Not Eof do begin if DiaSemanaExt (DataAtual) = ClientDataSet1DI_SEMA_NOM.Text then Memo1.Lines.Add((ClientDataSet1DI_SEMA_NOM.Text) +´ ´ + (TimeToStr(HoraAtual)) +´ ´ + (DateToStr(DataAtual) + ´ ´ + (IntToStr(Dataminuto)))); ClientDataSet2.next; Dataminuto := ClientDataSet2MD_AG_MEDI_TEMP_MED.AsInteger; Next; end; end;// {::::::::::::::::::::::::FIM DO CÓDIGO:::::::::::::::::::::::::::::::::::::::::} HoraAtual := IncMinuto(HoraAtual, Dataminuto); end; DataAtual := IncDia(DataAtual, 1); end; end; end.
06/03/2006
Rjun
1) Se a hora inicial e hora final estão em um campo da tabela, por que você esta pegando esses valores dos Edit2 e Edit4?
2) Foi eu que postei esse código. Era para você adaptar a seu caso.
3) No tópico anterior eu havia postado que as funções [b:9b4074fe7a]IncDia[/b:9b4074fe7a] e [b:9b4074fe7a]IncMinuto[/b:9b4074fe7a] já existem no Delphi (IncDays e IncMinute). Não vejo razão para reinventar a roda.
4) Também falei que seu código para saber se o ano bissexto está errado.
06/03/2006
Exvasp
Sim o seu código funciona perfeitamente, mas se adapto a este caso que é o que estou precisando ele gera apenas com base no primeiro registro da tabela AGENDA e não gera com base nos demais registros que é o que não estou conseguindo fazer, desculpe mas não sei fazer mesmo.
06/03/2006
Exvasp
Coloquei a explicação de forma errada sendo que a correta que quero conseguir é essa:
Após clicar no botão gerar horários o sistema deverá gerar os horários conforme abaixo:
Estado da TABELA AGENDAMENTO após clicar em gerar horários
SALA_COD - ESPECIE_ATENDIMENTO- DIA_AGENDADO - HORARIO_AGENDADO
1 ----------------------- 2(ortopedia)----------- 10/03/2006 ---------8:00:00
1 ----------------------- 2 ----------------------- 10/03/2006---------8:30:00
1 ----------------------- 2 ----------------------- 10/03/2006----------9:00:00
1------------------------ 2 ----------------------- 10/03/2006----------9:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------10:00:00
1------------------------ 2 ----------------------- 10/03/2006---------10:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------11:00:00
1------------------------ 2 ----------------------- 10/03/2006---------11:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------12:00:00
4 ----------------------- 1(clinica médica)------- 14/03/2006---------9:00:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:20:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:40:00
4------------------------ 1 ----------------------- 14/03/2006---------10:00:00
4------------------------ 1 ----------------------- 14/03/2006---------10:20:00
4------------------------ 1 ----------------------- 14/03/2006---------10:40:00
4------------------------ 1 ----------------------- 14/03/2006---------11:00:00
4------------------------ 1 ----------------------- 14/03/2006---------11:20:00
4------------------------ 1 ------------------------ 14/03/2006--------11:40:00
4------------------------ 1 ----------------------- 14/03/2006---------12:00:00
É isso que não estou conseguindo fazer.
Se puder me ajudar agradeço muito. mas muito mesmo!!!!
07/03/2006
Rjun
08/03/2006
Exvasp
Muito obrigado por ter respondido!!!
Caso Eu não consiga Eu volto a postar mensagem neste tópico
Clique aqui para fazer login e interagir na Comunidade :)