Ir para conteúdo

POWERED BY:

Arquivado

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

Marcus V

Consulta por data (between) em formulario asp

Recommended Posts

O que quero fazer: realizar uma consulta em formulario asp por data (periodos) em dados dentro de um banco de dados SQL.

 

Como esta atualmente: a conexão com o banco esta ok, ao clicar no botão de consultar (submit) ele traz todas as informações.

 

Problema: não estou conseguindo fazer com que os campos do formulário, realmente funcionem e realize a consulta com as datas que inserir, por exemplo consultar o periodo de 01/01/2014 ate 01/10/2014. dentro do campo posso deixar em branco ou digitar qualquer coisa, clicando no consultar traz sempre tudo.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

se entendi bem, 1 lógica simples:

1. verifique se os 2 campos foram preenchidos;

2. converta as datas digitadas no formulário no formato correto no banco de dados, armazenando-as em duas variáveis: variavel1 e variavel2, por exemplo ;

3. na consulta à tabela use os operadores between e where, exemplo:

select dados from tabela where coluna_dia between variavel1 e variavel2;

4. se não foram preenchidos, a sql fica apenas:

select dados from tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao olhe os codigos do formulario:

 

<form name="save" method="POST" action="testedata.asp">
<p align="left">
<input type="text" name="DataInscricao" maxlength="20" size="20" value=""> 
até 
<input type="text" name="DataInscricao" maxlength="20" size="20" value=""> 
<input type="submit" value="Consultar" name="btEnviar">
<input type="reset" value="Limpar"></p>
<p align="left">
 </p>
</form>
código da consulta:
<%@ LANGUAGE="VBSCRIPT" %>
<html>
<head>
<title></title>
</head>
<body>
<%
Dim Sql
Set BdWeb = Server.CreateObject("ADODB.Connection")
BdWeb.Open "Provider=SQLOLEDB.1;SERVER=cradfsr008;DATABASE=teste;UID=ite;PWD=ite;"
Set rsWeb = Server.CreateObject("ADODB.RecordSet")
rsWeb.Open "SELECT DataInscricao , Nome, RegistroConselhoFROM Profissionais WHERE DataInscricao between '10/01/2014' and '10/31/2014' ORDER BY 'Nome','DataInscricao' ",Bdweb,3,3
Set rsWeb2 = Server.CreateObject("ADODB.RecordSet")
rsWeb2.Open " ",Bdweb,3,3
%>
<%
if rsWeb.eof then
response.redirect "carteira.asp"
response.end
end if
%>
<%
If RsWeb.BOF and RsWeb.EOF Then%>
<h2 align="center">Nenhuma informação localizada ! </h2>
<hr>
<center><a href="busca_cart_pdt.asp">Retorna</a></center>
<%Else%>
<%If Not RsWeb.BOF Then%>
<h2>Resultado da Busca: </h2>
<hr>
<table BORDER="0" width="80%" cellpadding="0" cellspacing="0">
<%
Do While Not RsWeb.EOF
%>
<td>
<tr><b>NOME:</b>
<%=RsWeb("Nome")%> <br>
<br>
</tr><tr><b>DATA DE REGISTRO:</b>
<%=RsWeb("DataInscricao")%> <br>
<br>
</tr><tr><b>DATA DE REGISTRO:</b>
<%=RsWeb("RegistroConselho")%> <br>
<br>
</tr>
<hr>
<p>
<%RsWeb.MoveNext
Loop%>
<center><a href="busca_cart_pdt.asp">Retorna</a></center>
</table>
<%End If%>
<%End If%>
<%
RsWeb.Close
BdWeb.Close
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Entao olhe os codigos do formulario:

(...)

 

como eu disse, armazene os conteudos em duas variaveis

(não são duas datas?):

 

variavel1 e variavel2, por exemplo

 

no form que c postou você só teria uma ("DataInscricao")...

 

1 dica: procure sempre testar a sql primeiro diretamente no banco - use os Mysql workbench (não sei se o nome é exatamente esse), phpmyadmin, HeidiSQL ou SQLYog da vida, vc vai ver como ganha (1 bom) tempo já sabendo se a consulta está ok; no teu caso, vou insistir: verifique se as datas q vc digitou estão realmente no formato correto (SQL Server, Mysql e Postgres utilizam o timestamp.. pesquise)..

Compartilhar este post


Link para o post
Compartilhar em outros sites

CÓDIGO FORMULÁRIO

 

<form name="save" method="POST" action="testedata.asp">
<p align="left">


<input type="text" name="dataini" maxlength="20" size="20" value=""> 
até 


<input type="text" name="datafim" maxlength="20" size="20" value=""> 

<input type="submit" value="Consultar" name="btEnviar">

<input type="reset" value="Limpar"></p>
<p align="left">
 </p>
</form>

CÓDIGO CONSULTA

 

<%
dim inicio
dim fim
inicio=month(Request("dataini"))& "/" & day(Request("dataini")) & "/" & year(Request("dataini"))
fim=month(Request("datafim"))& "/" & day(Request("datafim")) & "/" & year(Request("datafim"))
%>
Set rsWeb = Server.CreateObject("ADODB.RecordSet")
rsWeb.Open " SELECT * FROM PROFISSIONAIS WHERE DATAINSCRICAO BETWEEN #"& inicio &"# AND #"& fim &"# ORDER BY NOME ASC",Bdweb,3,3
ERRO QUE TA DANDO:

Microsoft OLE DB Provider for SQL Server erro '80040e14'

Incorrect syntax near '#'.

/consultas/testedata.asp, line 23

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

CÓDIGO FORMULÁRIO

 

<form name="save" method="POST" action="testedata.asp">

<p align="left">

 

 

<input type="text" name="dataini" maxlength="20" size="20" value=""> 

até 

 

 

<input type="text" name="datafim" maxlength="20" size="20" value=""> 

 

<input type="submit" value="Consultar" name="btEnviar">

 

<input type="reset" value="Limpar"></p>

<p align="left">

 </p>

</form>

 

CÓDIGO CONSULTA

 

<%
dim inicio
dim fim
inicio=month(Request("dataini"))& "/" & day(Request("dataini")) & "/" & year(Request("dataini"))
fim=month(Request("datafim"))& "/" & day(Request("datafim")) & "/" & year(Request("datafim"))
%>
Set rsWeb = Server.CreateObject("ADODB.RecordSet")
rsWeb.Open " SELECT * FROM PROFISSIONAIS WHERE DATAINSCRICAO BETWEEN #"& inicio &"# AND #"& fim &"# ORDER BY NOME ASC",Bdweb,3,3
ERRO QUE TA DANDO:

Microsoft OLE DB Provider for SQL Server erro '80040e14'

Incorrect syntax near '#'.

/consultas/testedata.asp, line 23

 

kra ja passei pela mesma luta a tempos atras mas consegui, so olha no forum tem como fazer mas te entendo pq ate hj nao aprendi a pesquisar so aki no forum em asp mas vamos lá.

 

o que precisa fazer:

Validar os campos recebidos do formulario

colocar no formato do banco de dados geralemnte inverte mm/dd/aaaa ou seja vc precisa inverter o dado que o usuario coloca no formulario de 10/01/2014 para 01/10/2014.

o resto e o de sempre select no banco usando o bettewn

 

vou colar o meu aki pra ver se te dá uma luz

Segue o codigo:(em negrito italico subliado os comentarios)

<%

'recolhendo as datas do formulario
var_datai = trim(request.form("datai"))
var_dataf = trim(request.form("dataf"))
' Verifica Datai, se é válida
data_teste = trim(request.form("datai"))
ano = right(data_teste,4)'Seleciona Ano
mes = right(data_teste,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_teste,2) ' seleciona o dia
datai = ano&"/"&mes&"/"&dia
datai_brasileira = dia&"/"&mes&"/"&ano
if IsDate(datai) = False Then
Response.Write("<script language='JavaScript'>alert('Data inicial Inválida use o formato DD/MM/AAAA!');location.href='Atualizar_bf.html';</script>")
else
' Verifica Dataf, se é válida
data_test = trim(request.form("dataf"))
ano = right(data_test,4)'Seleciona Ano
mes = right(data_test,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_test,2) ' seleciona o dia
dataf = ano&"/"&mes&"/"&dia
dataf_brasileira = dia&"/"&mes&"/"&ano
if IsDate(dataF) = False Then
Response.Write("<script language='JavaScript'>alert('Data Final Inválida use o formato DD/MM/AAAA!');location.href='Atualizar_bf.html';</script>")
end if
end if
Function invertdata(data)
d=day(cdate(data))
m=month(cdate(data))
a=year(cdate(data))
invertdata = m & "/"& d & "/" & a
SESSION("Vdatai")=var_datai
SESSION("Vdataf")=var_dataf
end function
var_datai = invertdata(var_datai)
var_dataf = invertdata(var_dataf)
%>
<%
'realiza o select
vSql = "select * from tab_atualizar_brasfels where data between #"&var_datai&"# and #"&var_dataf&"# order BY codigo DESC"
set myrst = server.createObject("ADODB.Recordset")
myRst.Open vSql, conn, 3,3
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

segui as orientações, porém continua dando :

 

Microsoft OLE DB Provider for SQL Server erro '80040e14'

Incorrect syntax near '#'.

/consultas/testedata.asp, line 23

Compartilhar este post


Link para o post
Compartilhar em outros sites

A unica coisa que precisa fazer é transformar a data para formato aaaa-mm-dd

a função para inverter a data é essa basta alterar para o formato que quiser neste exemplo ta jogando para ano/mes/dia como o amigo ronaldo sugeriu:

Function invertdata(data)

d=day(cdate(data))
m=month(cdate(data))
a=year(cdate(data))
' para inverter para ano/mes/dia
invertdata = a & "/"& m & "/" & d
end function
' aqui aplica a função nas variaveis que recolhemos do formulario
var_datai = invertdata(var_datai)
var_dataf = invertdata(var_dataf)

segui as orientações, porém continua dando :

 

Microsoft OLE DB Provider for SQL Server erro '80040e14'

Incorrect syntax near '#'.

/consultas/testedata.asp, line 23

Tenho certeza que nao seguiu tds as orientações mt menos copiou o codigo que postei e adaptou ao seu codigo rsrs tbm fazia principalmente com o xamburzun é mt dificil a primeiro momento (ainda mais qnd estamos aprendendo)olhar o codigo de outra pessoa e entender, mas tive dois mestres aki no forum que tinham a paciência de ler meu código e me mostrar Salve mestres fabio e gustavo!

o erro seria nesta linha?

<td>
<tr><b>NOME:</b>
<%=RsWeb("Nome")%> <br>
<br>

a msg de erro diz sintaxe incorreta'#' tem certeza que usa esse jogo da velha neste lugar? você nao usou em lugar nenhum só nesta linha

Compartilhar este post


Link para o post
Compartilhar em outros sites
a msg de erro diz sintaxe incorreta'#' tem certeza que usa esse jogo da velha neste lugar?

esse simbolo só vale p/ o Access

 

bom, se ainda não resolveu, essas linhas:

 

inicio=month(Request("dataini"))& "/" & day(Request("dataini")) & "/" & year(Request("dataini"))

fim=month(Request("datafim"))& "/" & day(Request("datafim")) & "/" & year(Request("datafim"))

 

(dica: habitue-se a utilizar "response.write" p/ checar variáveis; verá facilmente os erros dessas linhas)

troque por essas:

inicio=Year(request.form("dataini"))&"-"&Month(request.form("dataini"))&"-"&Day(request.form("dataini"))
fim=Year(request.form("datafim"))&"-"&Month(request.form("datafim"))&"-"&Day(request.form("datafim"))

sql:

"select * from profissionais where datainscricao between '"&inicio&"' and '"&fim&"' "

Atenção: é obrigatório preencher os dois campos no formato dd/mm/aaaa, ok?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse simbolo só vale p/ o Access

 

bom, se ainda não resolveu, essas linhas:

 

 

(dica: habitue-se a utilizar "response.write" p/ checar variáveis; verá facilmente os erros dessas linhas)

troque por essas:

inicio=Year(request.form("dataini"))&"-"&Month(request.form("dataini"))&"-"&Day(request.form("dataini"))
fim=Year(request.form("datafim"))&"-"&Month(request.form("datafim"))&"-"&Day(request.form("datafim"))

sql:

"select * from profissionais where datainscricao between '"&inicio&"' and '"&fim&"' "

Atenção: é obrigatório preencher os dois campos no formato dd/mm/aaaa, ok?

 

verdade eskeci de citar ke o meu banco esta em access! : ) um dia faço uma analise como a sua Fernando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira coisa vc tem que converter a data para o formato da data que esta no banco de dados se a sua coluna estiver no formato de date.

 

Nesse caso a data fica aaaa-mm-dd ou seja, 2014-11-08. Sendo assim vc tem que fazer a conversão para fazer a consulta.

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique a ortografia. pode ser um nome de coluna Invalido 'sua_coluna'. A coluna a qual você se refere na Base de Dados não foi encontrada. e também veja se os tipos de dados estão corretos. e dá uma olhada neste exemplos de conversão:

 

Formato: aaaa-mm-dd

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

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

Formato: dd-mm-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Day(ConDataBanco),2) &"-"& Right("0"&Month(ConDataBanco),2) &"-"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

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

Formato: mm-dd-aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Month(ConDataBanco),2) &"-"& Right("0"&Day(ConDataBanco),2) &"-"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

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

Formato: mm/dd/aaaa
<%
Function ConverterDataBanco(ConDataBanco)
    ConDataBanco = Right("0"&Month(ConDataBanco),2) &"/"& Right("0"&Day(ConDataBanco),2) &"/"& Year(ConDataBanco)
    ConverterDataBanco = ConDataBanco
End Function

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.