Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Argos

If dentro do Do While

Recommended Posts

Bom dia galera

 

Tenho o seguinte código

Do While FormatDateTime(rec("Horas"),0) <= FormatDateTime(("12:00:00"),0)

 	If FormatDateTime(rec("Horas"),0) = FormatDateTime(horarios_indisponiveis,0) then
  background = "#b00"
  color = "#fff"
  icone = "indisponivel.png"
  Else
  background = "#fff"
  color = "#000"
  icone = "disponivel.png"
       End If

response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
response.write "<img src=""agenda/imagens/"&icone&""" />"
response.write "</div>"

     rec.MoveNext
     loop

 

Acontece que, de vários, apenas o último horário indisponivel fica assinalado como deveria. Porque?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu o seguinte erro:

 

untime error '800a000d'

Type mismatch: 'FormatDateTime'

 

Ele vem daqui:

 

  agendamentos_simultaneos = rec3("agendamentos-simultaneos")
  atendimento = rec3("tipo-atendimento")

 	  Set rec2 = Server.CreateObject("ADODB.Recordset")
  rec2.Open "SELECT Hora_agendamento FROM Agendamentos WHERE Data_agendamento=datevalue('"&data_evento&"') GROUP BY Hora_agendamento HAVING count( Hora_agendamento ) >= "&agendamentos_simultaneos&"", conexao, 3, 3
  While not rec2.EOF
  horarios_indisponiveis = rec2("Hora_agendamento")
  	  rec2.MoveNext
  Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se colocar a linha:

If FormatDateTime(rec("Horas"),0) = FormatDateTime(horarios_indisponiveis,0)

assim:

If FormatDateTime(rec("Horas"),0) = FormatDateTime(rec2("Hora_agendamento"),0)

 

Mas note que o erro de Type mismatch: 'FormatDateTime' é porque os tipos são incompativeis.

Veja se os valores que está comparando estão no mesmo formato ou se apenas um deles precisa ser formatado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

argos,

 

pelo segundo codigo que mandou está claro que voce estar armazenando na variavel horarios_indisponiveis apenas o ultimo horário. por isso o seu problema.

você precisa transformar essa variavel em um vetor que armazene todos os horarios indisponiveis ou realizar a consulta dentro do primeiro while que enviou. do jeito que está o seu codigo, nunca vai funcionar.

sempre mande um contexto do codigo completo porque fica dificil de agente adivinhar o que voce escreveu e nao postou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius, troquei como indicou, mas o erro persiste. Cheguei a trocar tbm pelo próprio horário = FormatDateTime("12:00:00",0) pra testar, e apenas o ultimo aparece.

@fabiosantosrj, eu não sei ao certo quantos horários serão listados (pode variar). O correto seria eu criar uma Function? Contar os registros, fazer de 0 até essa quantidade-1..? Desculpe a pergunta, mas procurei alguns lugares que me auxiliassem e não encontrei.

Compartilhar este post


Link para o post
Compartilhar em outros sites
data_evento = Request.QueryString("data")

'Encontra os horarios indisponiveis, de acordo com a quantidade de agendamentos simultaneos permitidos

 	  Dim rec

  Set rec = Server.CreateObject("ADODB.Recordset")
  rec.ActiveConnection = conexao
  rec.Source = "Select * FROM Extras"
  rec.Open()

  agendamentos_simultaneos = rec("agendamentos-simultaneos")
  atendimento = rec("tipo-atendimento")

	  Set rec2 = Server.CreateObject("ADODB.Recordset")
         rec2.Open "SELECT Hora_agendamento FROM Agendamentos WHERE Data_agendamento=datevalue('"&data_evento&"') GROUP BY Hora_agendamento HAVING count( Hora_agendamento ) >= "&agendamentos_simultaneos&"", conexao, 3, 3
         While not rec2.EOF
         horarios_indisponiveis = rec2("Hora_agendamento")
         rec2.MoveNext
         Wend


'Cria a tabela que mostra  os horarios disponiveis e indisponiveis

  Set rec3 = Server.CreateObject("ADODB.Recordset")
  rec3.ActiveConnection = conexao
  rec3.Source = "Select * FROM Horarios WHERE Aparecer = 'Sim' AND Tipo = '"&atendimento&"' ORDER BY ID"
  rec3.Open()

Response.write "<table border=0 border-color=#ccc width=300px bgcolor=#fff><tr>"
Response.write "<td align=center colspan=3 bgcolor=#b00 class=titulo>"
Response.write "Horários Disponíveis"
Response.write "</td>"
Response.write "</tr><tr>"
Response.write "<td align=center colspan=3>"
Response.write "Confira abaixo os horários disponíveis para agendamentos no dia "&data_evento&""
Response.write "</td>"
Response.write "</tr><tr>"
Response.write "<td width=100px align=center bgcolor=#222 class=titulo-tabela>Manhã</td>"
Response.write "<td width=100px align=center bgcolor=#222 class=titulo-tabela>Tarde</td>"
Response.write "<td width=100px align=center bgcolor=#222 class=titulo-tabela>Noite</td>"
Response.write "</tr>"
Response.write "<tr>"
Response.write "<td align=center valign=top>"

Do While FormatDateTime(rec3("horas"),0) <= FormatDateTime(("12:00:00"),0)

 	  If FormatDateTime(rec3("horas"),0) = FormatDateTime(horarios_indisponiveis,0) and rec3("horas") <> "" then
  background = "#b00"
  color = "#fff"
  icone = "indisponivel.png"
  Else
  background = "#fff"
  color = "#000"
  icone = "disponivel.png"
     End If

response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
response.write "<img src=""calendar/images/"&icone&""" />"
response.write "</div>"
response.write "<div align=left style=""background:"&background &"; color:"& color &";height:21px;padding-top:1px;width:65px;float:left;"">"
   response.write  rec3.Fields.Item("horas").Value &"<br>"
response.write "</div>"
   rec3.MoveNext
   loop

Response.write "</td>"
Response.write "<td align=center valign=top>"

   Do While FormatDateTime(rec3("horas"),0) > FormatDateTime(("12:00:00"),0) and FormatDateTime(rec3("horas"),0) <= FormatDateTime(("18:00:00"),0)

 	  If FormatDateTime(horarios_indisponiveis,0) = FormatDateTime(rec3("horas"),0) then
  background = "#b00"
  color = "#fff"
  icone = "indisponivel.png"
  Else
  background = "#fff"
  color = "#000"
  icone = "disponivel.png"
  End If


'response.write horarios_indisponiveis & "<br />"
response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
response.write "<img src=""calendar/images/"&icone&""" />"
response.write "</div>"
response.write "<div align=left style=""background:"&background &"; color:"& color &";height:21px;padding-top:1px;width:65px;float:left;"">"
   response.write  FormatDateTime(rec3("horas"),0) &"<br>"
response.write "</div>"

   rec3.MoveNext
   loop

Response.write "</td>"
Response.write "<td align=center valign=top>"

Do While FormatDateTime(rec3("horas"),0) > FormatDateTime(("18:00:00"),0) and FormatDateTime(rec3("horas"),0) <= FormatDateTime(("23:40:00"),0)

 	  If FormatDateTime(rec3("horas"),0) = FormatDateTime(horarios_indisponiveis,0) then
  background = "#b00"
  color = "#fff"
  icone = "indisponivel.png"
  Else
  background = "#fff"
  color = "#000"
  icone = "disponivel.png"
  End If

response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
response.write "<img src=""calendar/images/"&icone&""" />"
response.write "</div>"
response.write "<div align=left style=""background:"&background &"; color:"& color &";height:21px;padding-top:1px;width:65px;float:left;"">"
   response.write  rec3.Fields.Item("horas").Value &"<br>"
response.write "</div>"
   rec3.MoveNext
If rec3.EOF Then Exit Do
loop

Response.write "</td>"

Response.write "</tr></table>"

'----------------------------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------------------------
response.write "<div style=""color:#fff;margin-top:5px;"">"
response.write "Atualmente estamos fazendo ate<br> "&agendamentos_simultaneos&" agendamentos simultâneos"
response.write "</div>"

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente esse codigo:

 

data_evento = Request.QueryString("data")

'Encontra os horarios indisponiveis, de acordo com a quantidade de agendamentos simultaneos permitidos

     	Dim rec

     	Set rec = Server.CreateObject("ADODB.Recordset")
     	rec.ActiveConnection = conexao
     	rec.Source = "Select * FROM Extras"
     	rec.Open()

     	agendamentos_simultaneos = rec("agendamentos-simultaneos")
     	atendimento = rec("tipo-atendimento")

             	Set rec2 = Server.CreateObject("ADODB.Recordset")
     	rec2.Open "SELECT Hora_agendamento FROM Agendamentos WHERE Data_agendamento=datevalue('"&data_evento&"') GROUP BY Hora_agendamento HAVING count( Hora_agendamento ) >= "&agendamentos_simultaneos&"", conexao, 3, 3

redim horarios_indisponiveis(rec2.recordcount)

     	While not rec2.EOF
      	horarios_indisponiveis(rec2.absoluteposition) = rec2("Hora_agendamento")
   		  rec2.MoveNext
     	Wend


'Cria a tabela que mostra  os horarios disponiveis e indisponiveis

     	Set rec3 = Server.CreateObject("ADODB.Recordset")
     	rec3.ActiveConnection = conexao
     	rec3.Source = "Select * FROM Horarios WHERE Aparecer = 'Sim' AND Tipo = '"&atendimento&"' ORDER BY ID"
     	rec3.Open()

   	Response.write "<table border=0 border-color=#ccc width=300px bgcolor=#fff><tr>"
   	Response.write "<td align=center colspan=3 bgcolor=#b00 class=titulo>"
   	Response.write "Horários Disponíveis"
   	Response.write "</td>"
   	Response.write "</tr><tr>"
   	Response.write "<td align=center colspan=3>"
   	Response.write "Confira abaixo os horários disponíveis para agendamentos no dia "&data_evento&""
   	Response.write "</td>"
   	Response.write "</tr><tr>"
   	Response.write "<td width=100px align=center bgcolor=#222 class=titulo-tabela>Manhã</td>"
   	Response.write "<td width=100px align=center bgcolor=#222 class=titulo-tabela>Tarde</td>"
   	Response.write "<td width=100px align=center bgcolor=#222 class=titulo-tabela>Noite</td>"
   	Response.write "</tr>"
   	Response.write "<tr>"
   	Response.write "<td align=center valign=top>"

   	Do While FormatDateTime(rec3("horas"),0) <= FormatDateTime(("12:00:00"),0)

for i = 0 to ubound(horarios_indisponiveis) 

   	If FormatDateTime(rec3("horas"),0) = FormatDateTime(horarios_indisponiveis(i),0) and rec3("horas") <> "" then
     	background = "#b00"
     	color = "#fff"
     	icone = "indisponivel.png"
     	Else
     	background = "#fff"
     	color = "#000"
     	icone = "disponivel.png"
End If

   	response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
   	response.write "<img src=""calendar/images/"&icone&""" />"
   	response.write "</div>"
   	response.write "<div align=left style=""background:"&background &"; color:"& color &";height:21px;padding-top:1px;width:65px;float:left;"">"
response.write  rec3.Fields.Item("horas").Value &"<br>"
   	response.write "</div>"

next

rec3.MoveNext
loop

   	Response.write "</td>"
   	Response.write "<td align=center valign=top>"

Do While FormatDateTime(rec3("horas"),0) > FormatDateTime(("12:00:00"),0) and FormatDateTime(rec3("horas"),0) <= FormatDateTime(("18:00:00"),0)

for i = 0 to ubound(horarios_indisponiveis) 

     	If FormatDateTime(horarios_indisponiveis(i),0) = FormatDateTime(rec3("horas"),0) then
     	background = "#b00"
     	color = "#fff"
     	icone = "indisponivel.png"
     	Else
     	background = "#fff"
     	color = "#000"
     	icone = "disponivel.png"
     	End If


   	'response.write horarios_indisponiveis & "<br />"
   	response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
   	response.write "<img src=""calendar/images/"&icone&""" />"
   	response.write "</div>"
   	response.write "<div align=left style=""background:"&background &"; color:"& color &";height:21px;padding-top:1px;width:65px;float:left;"">"
response.write  FormatDateTime(rec3("horas"),0) &"<br>"
   	response.write "</div>"

next

rec3.MoveNext
loop

   	Response.write "</td>"
   	Response.write "<td align=center valign=top>"

   	Do While FormatDateTime(rec3("horas"),0) > FormatDateTime(("18:00:00"),0) and FormatDateTime(rec3("horas"),0) <= FormatDateTime(("23:40:00"),0)

for i = 0 to ubound(horarios_indisponiveis) 

     	If FormatDateTime(rec3("horas"),0) = FormatDateTime(horarios_indisponiveis(i),0) then
     	background = "#b00"
     	color = "#fff"
     	icone = "indisponivel.png"
     	Else
     	background = "#fff"
     	color = "#000"
     	icone = "disponivel.png"
     	End If

   	response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"
   	response.write "<img src=""calendar/images/"&icone&""" />"
   	response.write "</div>"
   	response.write "<div align=left style=""background:"&background &"; color:"& color &";height:21px;padding-top:1px;width:65px;float:left;"">"
response.write  rec3.Fields.Item("horas").Value &"<br>"
   	response.write "</div>"

next

rec3.MoveNext

   	If rec3.EOF Then Exit Do
   	loop

   	Response.write "</td>"

   	Response.write "</tr></table>"

'----------------------------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------------------------
   	response.write "<div style=""color:#fff;margin-top:5px;"">"
   	response.write "Atualmente estamos fazendo ate<br> "&agendamentos_simultaneos&" agendamentos simultâneos"
   	response.write "</div>"

 

talvez tenha que adaptar algo. mas o que eu fiz foi transformar a variavel horarios_indisponiveis em vetor e ler todas as posicoes desse vetor. da forma como estava, voce estava apenas pegando a ultima posicao dos registros de horarios_indisponiveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu @fabiosantosrj!

 

Mas ainda tem alguma coisinha pra ajustar. Pra teste, eu preenchi os horários das 14:00 e das 15:00. Ele assinala, além desses 2, a 00:00 tbm ( oq colocando <> Empty deve resolver), mas o problema msm eh que ele está listando 3x cada horário:

 

12:20:00

.

.

.

.

13:40:00

13:40:00

13:40:00

14:00:00

14:00:00 - Assinalado

14:00:00

14:20:00

14:20:00

14:20:00

14:40:00

14:40:00

14:40:00

15:00:00

15:00:00

15:00:00 - Assinalado

15:20:00

15:20:00

15:20:00

15:40:00

.

.

.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso de imprimir 3 vezes deve estar acontecendo pq coloquei o next no lugar errado. tente colocar acima da linha abaixo:

 

response.write "<div style=""background:"&background &";height:20px;width:24px;padding:2px 0 0 3px;float:left;"">"

 

em relação a zero hora, veja o conteudo da variavel vetor eu acho que tem o zero hora nela.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi começar de novo pra tentar primeiro listar todos os horários e assinalar os horários indisponíveis pra depois arrumá-los em manhã, tarde e noite.

Mas, como antes, tenho dificuldade com loop dentro de outro loop. Estou fazendo da seguinte forma:

 

data_evento = Request.QueryString("data")

       Dim rec

       Set rec = Server.CreateObject("ADODB.Recordset")
       rec.ActiveConnection = conexao
       rec.Source = "Select * FROM Extras"
       rec.Open()

       agendamentos_simultaneos = rec("agendamentos-simultaneos")
       atendimento = rec("tipo-atendimento")

'*****************************************************************************************************************************************
       Set rec3 = Server.CreateObject("ADODB.Recordset")
       rec3.Open "Select * FROM Horarios WHERE Aparecer = 'Sim' AND Tipo = '"&atendimento&"' ORDER BY ID", conexao, 3, 3

       redim lista_horas(rec3.recordcount)

       While not rec3.EOF
         lista_horas(rec3.absoluteposition) = rec3("Cal_Horas")
       rec3.MoveNext
       Wend
'*****************************************************************************************************************************************
       Set rec2 = Server.CreateObject("ADODB.Recordset")
       rec2.Open "SELECT Hora_agendamento FROM Agendamentos WHERE Data_agendamento=datevalue('"&data_evento&"') GROUP BY Hora_agendamento HAVING count( Hora_agendamento ) >= "&agendamentos_simultaneos&"", conexao, 3, 3

       redim horarios_indisponiveis(rec2.recordcount)

       While not rec2.EOF
         horarios_indisponiveis(rec2.absoluteposition) = rec2("Hora_agendamento")
       rec2.MoveNext
       Wend
'*****************************************************************************************************************************************

   Dim i : i = 1
   Dim r : r = 1

   Do While i <= ubound(lista_horas)

       Do While r <= ubound(horarios_indisponiveis)
          	response.Write horarios_indisponiveis(r) &"<br />"
           r = r + 1
       Loop 

	If  lista_horas(i) = horarios_indisponiveis(r) Then
	  response.Write lista_horas(i) & "-IGUAL<br />"
	Else
	  response.Write lista_horas(i) & "<br />"
	End If
   i = i + 1
   Loop 

 

Está dando erro: Subscript out of range: '3' na linha

If  lista_horas(i) = horarios_indisponiveis(r) Then

 

O ubound(horarios_indisponiveis) tem 2 registro. Como faço pra ele ler o "r" até o 2 só, estando dentro de outro loop? Ou não é esse o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.