Ir para conteúdo

POWERED BY:

Arquivado

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

Ronaldo Bueno

[Resolvido] Data Hora e Outros Access

Recommended Posts

Olá, preciso de ajuda mais uma vez.

 

Tenho um sistema de marcar consulta, então quando entra na janela de marcar, você escolhe o médico, ele filtra e joga no select os horários que aquele medico tem para aquele dia. até aí tudo bem. quando você escolhe uma hora ele valida e diz se esta livre ou ocupado (porque o select de horas não é feito na mesma tabela, vem de uma outra onde tem o horário que atende de acordo com o dia da semana.)

 

quando comecei a fazer coloquei todos os campos data e hora das tabelas como texto (um erro fatal rsrs) e tudo esta funcionando perfeitamente, só que agora estou fazendo uma parte onde filtra em intervalos (BETWEEN) de datas (agenda por exemplo) do médico TAL do dia 01/07/2011 à 05/07/2011 e com campo texto não consegui fazer, ele retorna eof (acredito eu que seja porque o campo é texto, mas se alguém tiver outra opnião ai não mudo as outras coisas.)

 

Ai fiz o seguinte, mudei todos os campos data e hora para DATA/HORA (tanto faz formato abreviado ou não) e começou dar pau na marcação de consulta. primeiro veio essa linha:

strQueryPegar="select * from consultorio where medico='"&medicosatual&"' and dataconsulta="&dia1&" and horaconsulta="&horas&" and presenca<>'"&pre&"'"

onde os formatos recebidos são: medico = Fulano de tal / dataconsulta = 4/8/2011 / horaconsulta = 12:00 / presenca = C

então pela lógica no select os campos TEXT estão com '' e os datas e horas sem, certo?

 

Todos os erros são na select (quase todas iguais) o erro é:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'medico='Fulano de tal' and dataconsulta=4/8/2011 and horaconsulta=12:00 and presenca<>C'

 

e tem uma parte importante: quando abro a pagina de marcar ele vem de outra com a data ai faço o seguinte:

gg = request("data")
Data1 = Cdate(gg)

 

essa gg é que manipulo tudo tanto na hora de buscar como gravar.

 

Alguém poderia dar uma luz no fundo do túnel ? Tanto para o problema de BETWEEN com campo data e hora formato texto, como o outro.

 

Porque se eu conseguir fazer o BETWEEN assim, não mudo nada e fica tudo perfeito rsrsrs

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testou o sql colocando aspas simples na data e hora ?

 

strQueryPegar="select * from consultorio where medico='"&medicosatual&"' and dataconsulta='"&dia1&"' and horaconsulta='"&horas&"' and presenca<>'"&pre&"'"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você terá de converte-los para um tipo compativel com o formato no banco de dados, CSTR, CDate, algo assim.

 

Antes de mandar executar a sql, manda escrever ela para ver como o banco de dados está recebendo a instrução:

 

strQueryPegar="select * from consultorio where medico='"&medicosatual&"' and dataconsulta="&dia1&" and horaconsulta="&horas&" and presenca<>'"&pre&"'"

response.write strQueryPegar
'rs=con.execute(strQueryPegar)

Compartilhar este post


Link para o post
Compartilhar em outros sites

a instrução esta na mesma forma que o erro:

select * from consultorio where medico='Dr. Ronaldo Bueno Jr.' and dataconsulta=4/8/2011 and horaconsulta=12:00 and presenca<>'C'

 

o Banco é Acess e coloquei como data/hora formato abreviado. que formato seria esse q esta falando ? a string ? pelo que vi esta indo certo, não acha ?

 

Conhece uma maneira de fazer consulta entre data com o campo texto e não data/hora ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Converte a variavel para o formato correspondente ao do banco de dados, e coloca as aspas simples no sql que está faltando.

Eu normalmente uso assim as consultas para data:

 

data=date()
sql="select * from tabela where data='"&data&"' ...

 

Mas isso é para campos com formato data, algum tempo atras estava numa situação semelhante a sua, e se não me engano convertia para string e fazia o select.

Mas os campos não eram como os seus, pois lá a data era assim: 04/04/2011, por exemplo.

 

Uma possibilidade é formatar a data assim:

data = RIGHT("0" & DAY(data),2) & "/" & RIGHT("0" & MONTH(data),2) & "/" & YEAR(data) 

 

Outra possibilidade seria:

SESSION.LCID = 1057
data = "1/5/2006"
DATA = FormatDateTime(data,2)

 

Tem um topico interessante aqui no forum que pode te ajudar: formatar data dessa forma 01/05/2005

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius,

 

Valeu pela ajuda, mas testei dessa forma e nada.

 

Aí pensei:

 

Vou voltar como antes e depois descubro uma forma de fazer a consulta em intervalos com campo texto.

 

Alterei o ASP, alterei o BD novamente para campo texto e para minha grande surpresa, tudo esta funcionando perfetamente kkkkkk

 

a marcação já estava redondo o problema era as consultas de agenda, de faturamento, todas elas envolvem aquele select acima.

 

Não sei explicar o que aconteceu, mas deixo a solução aqui para quem sabe ajudar algum necessitado como eu rsrs.

 

Abs, Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xiiiiiiiiii,

 

resolvido nada, não estava prestando atenção direito.

 

2 dias de intervalo beleza. mas um mês o bicho pegou kkkk

 

Alguma solução para intervalo com campo texto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o que esta sendo passado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não esquecendo que meu campo esta como texto - voltei para o que estava.

 

SELECT * FROM consultorio WHERE convenio = 'Adventista' and guia = 'Sim' and dataconsulta BETWEEN '08/08/2011' and '08/08/2011' ORDER BY dataconsulta,horaconsulta
Adventista
08/08/2011
08/08/2011

 

Aproveitando o mesmo tópico porque é do mesmo assunto, esse sistema esta dando pau em tudo quanto é data rsrs

 

Tenho uma outra tabela chamada gerenciarusuarios com os campos:

usuario - texto

data - data/hora

hora - data/hora

url - texto

 

Essa tabela serve para gravar os dados de onde o usuário vai (tipo rastrear)

 

o código que grava é esse:

SESSION.LCID = 1057 

usuario = session("usuario")
data1 	= date()
hora 	= time
url 	= Request.ServerVariables("URL")
data = FormatDateTime(data1,2)

set RSgravaacesso = server.createobject("adodb.recordset")
SQLgravaacesso = "insert into gerenciarusuarios (usuario,data,hora,url) values ('"&usuario&"','"&data&"','"&hora&"','"&url&"')"
RSgravaacesso.open SQLgravaacesso, conn

 

com isso os registros ficam:

Usuário - 08/08/2011 - 10:01:21 - caminho

 

quando abro a janela ele mostra todos os registros, ai tem um botão para filtrar por data, que não esta funcionando.

datapesquisa 	= request("txt_data")
"Select * From gerenciarusuarios where data = " & datapesquisa & " Order By data, hora"

a SQL fica assim:

Select * From gerenciarusuarios where data = 08/08/2011 Order By data, hora

 

já coloquei assim :

"Select * From gerenciarusuarios where data = '" & datapesquisa & "' Order By data, hora"

e dá erro.

 

Alguém teria alguma dica dos problemas que estão acontecendo sobre o servidor?

Tipo: testei uma rotina igual essa que envolve data em outro domínio e funcionou perfeito, somente nesse domínio tudo que envolve data não funciona.

Talvez uma dica de banco de dados tb (configurações e outros), porque não sei mais o que fazer. não sei se é o banco ou o servidor, não sei se o servidor teria influência em alguma coisa.

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode testar o Server Variables para ver se tem alguma grande diferença entre os servidores.

 

Outra possibilidade seria a questão das aspas simples na data, mas disse que dá erro.

Qual seria o erro ?

 

Testou se pegar a variavel e converte-la para data ?

Talvez o problema seja a variavel estar como string e não como data, algo assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius,

 

Fiz o seguinte:

 

dataii 			= request.form("datai")
dataff 			= request.form("dataf")

datai 			= Cdate(dataii)
dataf 			= Cdate(dataff)

 

e funcionou, só que com intervalos tipo 08/08/2011 - 08/08/2011 (um dia) ele não filtra.

outra coisa, tem um campo valor nessa página e está saindo assim: Rp36, andei dando uma pesquisada e esse estilo é da indonésia rsrs

 

mas no código está:

<%=formatcurrency(RSTotalValor("totalvalor"))%>

 

Alguma diga a mais ?

Obrigado a todos

 

Mudei para

Session.LCID = 1046

na hora de mostrar e funcionou.

 

Agora só falta o outro caso rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está assim:

"SELECT * FROM consultorio WHERE convenio = '" & convenios & "' and guia = 'Sim' and dataconsulta BETWEEN '" & datai & "' and '" & dataf & "' ORDER BY dataconsulta,horaconsulta"

 

Já dei um response em tudo e esta indo beleza, mas continuo achando que o problema é porque o campo é texto, mas como disse lá no início, se mudar para DATA/HORA, nada funciona e para em tudo.

 

Porque que mesmo com esse código abaixo ele insiste em gravar a data no formato MM/DD/AAAA

Session.LCID = 1046
data 	= date()

 

Exemplo: 08/09/2011

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se esta função ajuda:

<%
Function ConverterDataBanco(ConDataBanco)
       ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
       ConverterDataBanco = ConDataBanco
End Function

Response.Write(ConverterDataBanco(Date()))
%>

 

Uma outra possibilidade seria converter para string a sua data antes de inserir no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como está exatamente a sua query e quais os tipos de dados em seu banco para cada campo?

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.