Ir ao conteúdo
  • Cadastre-se

Problemas While, If - ASP


bhe4d

Posts recomendados

Olá pessoal td bem ?

seguinte estou com um problema no código que não estou conseguindo resolver de forma alguma.

tenho um formulário que agenda reuniões. e grava estas informações em um bd (em access mesmo) mas estou com um problema. quando um usuário for cadastrar uma reunião o preciso fazer a verificação no bd para confirmar se o horário requisitado esta disponível.

fiz o seguinte código...


Dim rsVerificaDisp, sqldisp, flag

set rsVerificaDisp = Server.CreateObject("ADODB.Recordset")

sqldisp = "SELECT DataReuniao, Sala, HorarioInicial, HorarioFinal FROM TBL_REUNIAO where sala = '"& Request.Form("sala") &"' and DataReuniao = #"& Request.Form("DataReuniao") &"# ORDER BY HorarioInicial"
rsVerificaDisp.Open sqldisp, objDB, 3,2

flag = true

if not rsVerificaDisp.EOF then

While not rsVerificaDisp.EOF
if Request.Form("HorarioInicial")>= rsVerificaDisp.Fields("HorarioInicial") and Request.Form("HorarioInicial") < rsVerificaDisp.Fields("HorarioFinal") then
flag = false
End if
rsVerificaDisp.MoveNext
Wend

End if


if flag = true then
...

Else
....

mas ele não está conseguindo bloquear as reuniões em horários já agendados... não sei onde estou errando. sera que alguém sabe me dizer o problema ?

Aparentemente o problema está no if... não esta conseguindo fazer a verificação de forma correta.

Link para o comentário
Compartilhar em outros sites

vai depender da tua aplicação ai cara,

HorarioInicial, HorarioFinal no bd estão definidos como? string ou timestamp? Se for string, você vai ter que converter os valores para date, usando uma cast CDate(objeto) , no caso, objeto seria as strings retirados do banco e do usuário. Tipo

if CDate(Request.Form("HorarioInicial")>= CDate(rsVerificaDisp.Fields("HorarioInicial")) and CDate(Request.Form("HorarioInicial")) < CDate(rsVerificaDisp.Fields("HorarioFinal")) then

flag = false

End if

Link para o comentário
Compartilhar em outros sites

no bd está definido no formato de data\hora

ele deveria atender a condição somente se estivesse entre algum horario ... mas ele nem chega a entrar na condição... assim ele não muda a flag para false e acaba deixando cadastrar a reunião...

Link para o comentário
Compartilhar em outros sites

1º - "if not rsVerificaDisp.EOF then" não é preciso pois você ja faz isso no while "While not rsVerificaDisp.EOF".

2º - Verifica se tá retornando alguma linha, pois quando você faz o "if not rsVerificaDisp.EOF then" o ponteiro do RecordSet vai para indice + 1, aí tu faz novamente no "while not rsVerificaDisp.EOF" o indice do ponteiro sera indice + 1 de novo, assim se o resultado do sql tem 1 linha, não vai entrar no while porque vai dar EOF.

3º - Não esquece o cast com Cdate nos request.form("variavel"), pois ele vai tentar compara data com string, dando um erro.

Link para o comentário
Compartilhar em outros sites

puts cara consegui fazer funcionar graças a sua ajuda... :D o que tava faltando era mesmo os cdate mesmo... valeu cara muito obrigado pela ajuda...

só ta faltando um fecha parenteses mesmo ali no código que você colocou...

ficou assim agora o código


flag = true

Do While not rsVerificaDisp.EOF
if CDate(Request.Form("HorarioInicial"))>= CDate(rsVerificaDisp.Fields("HorarioInicial")) and CDate(Request.Form("HorarioInicial")) < CDate(rsVerificaDisp.Fields("HorarioFinal")) or CDate(Request.Form("HorarioFinal"))> CDate(rsVerificaDisp.Fields("HorarioInicial")) and CDate(Request.Form("HorarioFinal")) <= CDate(rsVerificaDisp.Fields("HorarioFinal")) or CDate(Request.Form("HorarioInicial")) < CDate(rsVerificaDisp.Fields("HorarioInicial")) and CDate(Request.Form("HorarioFinal")) > CDate(rsVerificaDisp.Fields("HorarioFinal")) then
flag = false
End if
rsVerificaDisp.MoveNext
Loop



if flag = true then
...
else
...

valeu !!!

Link para o comentário
Compartilhar em outros sites

puts cara aproveitando um pouco sua boa vontade...

verifiquei outro erro... que ta complicado de resolver.

recebo as informaçõesde data do formulário em DD/MM/YYYY .

só que a consulta ela está invertendo pra MM/DD/YYYY

como eu faço para setar a ordem que quero na consulta sql ?

tentei fazer com "set dateformat DMY; SELECT * .... " só que dá erro

Link para o comentário
Compartilhar em outros sites

tem uma funcao no vb que pode resolver seu problema

strDateTime = formatDate(stringformatodata, Date)

dá uma olhada neste blog

Lá explica rapidinho

puts cara aproveitando um pouco sua boa vontade...

verifiquei outro erro... que ta complicado de resolver.

recebo as informaçõesde data do formulário em DD/MM/YYYY .

só que a consulta ela está invertendo pra MM/DD/YYYY

como eu faço para setar a ordem que quero na consulta sql ?

tentei fazer com "set dateformat DMY; SELECT * .... " só que dá erro

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...