Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
bhe4d

Problemas While, If - ASP

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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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...

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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 !!!

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Este tópico está parado há muito tempo. Certifique-se que a sua mensagem tem a ver com o tema sendo discutido. Obrigado.

Junte-se à conversa

Você pode postar agora e cadastrar-se depois. Se você tem uma conta, faça o login para postar.

Visitante
Responder

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

  Só é possível ter até 75 emoticons.

×   O link foi automaticamente convertido para mostrar o conteúdo.   Clique aqui para mostrá-lo como link comum

×   Seu texto anterior foi restaurado.   Limpar o editor

×   You cannot paste images directly. Upload or insert images from URL.

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!