Foros del Web » Programando para Internet » ASP Clásico »

filtrar fecha de hoy

Estas en el tema de filtrar fecha de hoy en el foro de ASP Clásico en Foros del Web. hola, -se trata de un web asp con Acces y vscript- el problema es el siguiente: tengo una tabla "menu" el la base de datos, ...
  #1 (permalink)  
Antiguo 09/10/2007, 02:24
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
filtrar fecha de hoy

hola,
-se trata de un web asp con Acces y vscript-

el problema es el siguiente:
tengo una tabla "menu" el la base de datos, en la cual estan los datos de un menú del dia

- id (autonumerico)
- text (memo)
- fecha (fecha corta)

necesito filtar en el campo "fecha" la fecha del día en curso para que se muestre automaticamente el menú correspondiente al dia de hoy, o en su defecto (imaginemos que sea sabado o domingo -que no hay menú-) el de la fecha inmediatamente posterior.






salut

Última edición por potenkin; 09/10/2007 a las 03:17
  #2 (permalink)  
Antiguo 09/10/2007, 02:33
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

Asi, a bote pronto:

Dim hoy

hoy = Now()

if Weekday(hoy) = 1 then ' es Domingo
hoy = dateAdd("d", 1, hoy)
elseif Weekday(hoy) = 7 then ' es Sabado
hoy = dateAdd("d", 2, hoy)
end if

Luego no tienes mas que SELECT * FROM menu WHERE fecha = #" & hoy & "#"

Espero te sirva


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 09/10/2007, 03:17
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

lo pongo de la siguiente manera, no funciona corractamente, me dice que no hay ninguna referencia.

<%
Dim hoy
hoy = Now()
if Weekday(hoy) = 1 then ' es Domingo
hoy = dateAdd("d", 1, hoy)
elseif Weekday(hoy) = 7 then ' es Sabado
hoy = dateAdd("d", 2, hoy)
end if
%>
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows

Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_neoparc_STRING
Recordset1_cmd.CommandText = "SELECT * FROM menu WHERE fecha = #" & hoy & "#"
Recordset1_cmd.Prepared = true
Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 135, 1, -1, "%" + Recordset1__MMColParam + "%") ' adDBTimeStamp

Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
  #4 (permalink)  
Antiguo 09/10/2007, 04:01
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

Si vas a usar el objeto Command, hazlo como lo tenias antes:

SELECT * FROM menu WHERE fecha = ?

Y luego

' Si te fijas, pongo antes el mes que el dia: Esto evitará problemas a la hora de
' comparar fechas
Recordset1__MMColParam = Month(Hoy) & "-" & day(hoy) & "-" & Year(hoy)

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 135, 1, -1, "#" & Recordset1__MMColParam & "#") ' adDBTimeStamp


Si lo vas a hacer directamente sobre un recordset:

hoy = Month(Hoy) & "-" & day(hoy) & "-" & Year(hoy)
set rs = conn.execute("SELECT * FROM menu WHERE fecha = #" & hoy & "#" )

Depende del objeto que uses para atacar la BD




Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #5 (permalink)  
Antiguo 09/10/2007, 04:53
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

me da error
ADODB.Command error '800a0d5d'

con el siguiente codigo


<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = Month(Hoy) & "-" & day(hoy) & "-" & Year(hoy)
%>
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows

Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_neoparc_STRING
Recordset1_cmd.CommandText = "SELECT * FROM menu WHERE fecha = ?"
Recordset1_cmd.Prepared = true

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 135, 1, -1, "#" & Recordset1__MMColParam & "#") ' en esta linea da error
Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
  #6 (permalink)  
Antiguo 09/10/2007, 05:25
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

No se como grabas la fecha en tu base de datos pero tal y como tienes definido el CreateParameter es para una fecha timestamp. Para una fecha normal y corriente usa 7 o 133 (mas info)

Recordset1__MMColParam = Year(hoy) & Month(hoy) & Day(hoy)

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 133, 1, -1, Recordset1__MMColParam)

o

Recordset1__MMColParam = hoy

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 7, , , Recordset1__MMColParam)


Usar Command requiere cierta parametrización previa. Para casos como este donde no esperas datos desde fuera (o sea, no viene de un formulario, ni de un querystring) yo usaria un simple recordset

set rs = conn.execute("SELECT * FROM menu WHERE fecha = #" & hoy & "#")



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #7 (permalink)  
Antiguo 09/10/2007, 10:32
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

me da error, no se que es lo que hago mal


<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = Year(hoy) & Month(hoy) & Day(hoy)
%>
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows

Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_neoparc_STRING
Recordset1_cmd.CommandText = "SELECT * FROM menu WHERE fecha = ?"
Recordset1_cmd.Prepared = true

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 133, 1, -1, Recordset1__MMColParam) 'error, ADODB.Command error '800a0d5d'
Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
  #8 (permalink)  
Antiguo 09/10/2007, 11:56
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

Necesito saber 3 cosas:

1 - ¿Puedes poner la estructura de la tabla donde pretendes leer la información?

2 - Ademas de ese código de error y de la línea donde se produce, ¿te da más información? algo como "tipo equivocado", etc.

3 - Me gustaría saber por qué pones -1 en el tamaño del campo. El valor por defecto es 0. No le pongas nada. Dejalo como lo puse yo o mejor ("param1", 133, 1, Recordset1__MMColParam)


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 09/10/2007 a las 12:18
  #9 (permalink)  
Antiguo 10/10/2007, 01:27
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

hola,

1,- recojo los datos de la siguiente manera:
<%TEXT=Server.HTMLEncode(Recordset1.Fields.Item("t ext_cat").Value)
TEXT = REplace(TEXT,vbCrLf,"<br>")%>
<%=TEXT%>

(esta incluido el salto de linea)

2.- me da la siguiente info:
ADODB.Command error '800a0d5d'
La aplicación utiliza un valor de tipo no válido para la operación actual.

3.- La fecha esta en formato fecha corta
  #10 (permalink)  
Antiguo 10/10/2007, 02:38
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

La aplicación utiliza un valor de tipo no válido para la operación actual.

Esto quiere decir que estamos parametrizando mal. Necesitamos decirle al objeto Command que el parámetro es de tipo Date. Según dices, el campo que buscamos en la base de datos, fecha, es de tipo Date, ¿verdad? Intentemos esto:

Sustituye esta linea

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 133, 1, -1, Recordset1__MMColParam)

por esta

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 7, 1, Recordset1__MMColParam)

Asi, tal como está. Esto quiere decir que el parámetro es de tipo Date. Fíjate en las equivalencias en esta página: http://www.w3schools.com/ado/ado_datatypes.asp


Prueba y nos cuentas


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #11 (permalink)  
Antiguo 10/10/2007, 05:32
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

me dice lo siguiente:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][Controlador ODBC Microsoft Access]Formato de fecha u hora no válido (null)

el formato es de fecha corta, pero haciendo una consulta el BD veo que en el campo fecha, donde he introducido 10/10/07 hay la siguiente info: Wed Oct 10...
-------

<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = Year(hoy) & Month(hoy) & Day(hoy)
%>
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows

Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_neoparc_STRING
Recordset1_cmd.CommandText = "SELECT * FROM menu WHERE fecha = ?"
Recordset1_cmd.Prepared = true

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 7, 1, Recordset1__MMColParam)
Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>

Última edición por potenkin; 10/10/2007 a las 05:54
  #12 (permalink)  
Antiguo 10/10/2007, 06:03
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

Prueba con el otro valor, el adDBTimeStamp (135) Mira la lista que te dí antes. Como ves es un problema de tipo. No cambies nada más. Estamos cerca

Otra cosa: Cambia esto

Recordset1__MMColParam = Year(hoy) & Month(hoy) & Day(hoy)

por esto

Recordset1__MMColParam = Now()

if Weekday(Recordset1__MMColParam) = 1 then ' es Domingo
Recordset1__MMColParam = dateAdd("d", 1, Recordset1__MMColParam)
elseif Weekday(Recordset1__MMColParam) = 7 then ' es Sabado
Recordset1__MMColParam = dateAdd("d", 2, Recordset1__MMColParam)
end if

Para dejarlo tal y como preguntaste en el inicio de este tema. Tambien porque CreateParameter lo entenderá mucho mejor.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 10/10/2007 a las 07:45
  #13 (permalink)  
Antiguo 10/10/2007, 09:07
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

me devuelve

ADODB.Command error '800a0d5d'
La aplicación utiliza un valor de tipo no válido para la operación actual.

quizás no seria más facil buscar el dia, por dia de la semana (ya que solamente se introduce una semana de 5 referencias, una por día de la semana de lunes a viernes (ya que se trata de un menú diario de un restaurante -que solo introduce el menú de la próxima semana)
O bien tomandolo de la fecha, o bien incluyendo un nuevo campo de días de semana, que corresponda con cada menú.

--------------
<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = Now()

if Weekday(Recordset1__MMColParam) = 1 then ' es Domingo
Recordset1__MMColParam = dateAdd("d", 1, Recordset1__MMColParam)
elseif Weekday(Recordset1__MMColParam) = 7 then ' es Sabado
Recordset1__MMColParam = dateAdd("d", 2, Recordset1__MMColParam)
end if
%>
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows

Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_neoparc_STRING
Recordset1_cmd.CommandText = "SELECT * FROM menu WHERE fecha = ?"
Recordset1_cmd.Prepared = true

Recordset1_cmd.Parameters.Append Recordset1_cmd.CreateParameter("param1", 135, 1, Recordset1__MMColParam)
Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
  #14 (permalink)  
Antiguo 11/10/2007, 03:56
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

El problema es que no damos con el tipo que se requiere cuando creamos el parámetro para el objeto Command.

Según el código anterior, Recordset1__MMColParam es de tipo DateTime (Now() devuelve un DateTime completo). Las funciones que uso, tanto Weekday como dateAdd, funcionan si el parámetro enviado es de tipo Date, si no, lanzan un error. Esto quiere decir que el dato asignado a Recordset1__MMColParam es de tipo DateTime. Es el correcto.

El problema esta aqui:

Recordset1_cmd.CreateParameter("param1", 135, 1, Recordset1__MMColParam)


Prueba usando un recordset para recuperar el dato. Asi:

Código:
Dim Recordset1__MMColParam
Recordset1__MMColParam = Now()

if Weekday(Recordset1__MMColParam) = 1 then ' es Domingo
Recordset1__MMColParam = dateAdd("d", 1, Recordset1__MMColParam)
elseif Weekday(Recordset1__MMColParam) = 7 then ' es Sabado
Recordset1__MMColParam = dateAdd("d", 2, Recordset1__MMColParam)
end if 

Dim conn
Dim rs
Dim Recordset1_numRows

Set conn = Server.CreateObject ("ADODB.Connection")
conn.ConnectionString = MM_neoparc_STRING

set rs = conn.execute("SELECT * FROM menu WHERE fecha = #" & Recordset1__MMColParam & "#")

if not rs.EOF then Recordset1_numRows = rs.RecordCount()


%>
El objeto Command por que se suele usar para actualizar/insertar/borrar registros. De todas formas, debería funcionar.

Mira tu base de datos, la tabla menu, abrela en modo diseño y dime que tipo es el campo Fecha (Fecha/Hora, etc)

He estado mirando algunas páginas de como lo hace el Dreamweaver (yo cada vez menos uso el Dreamweaver, me gusta mucho el PSPad que lo uso casi para todo XD ) como esta:

http://kb.adobe.com/selfservice/view...330a&sliceId=2

Efectivamente, asignan -1 a los tipos DateStamp.

En fin, prueba ambos métodos, a ver cual te viene mejor y nos cuentas.



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #15 (permalink)  
Antiguo 11/10/2007, 08:31
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

me dice:

ADODB.Connection error '800a0e78'
La operación no está permitida si el objeto está cerrado.

error en la siguiente linea

set rs = conn.execute("SELECT * FROM menu WHERE fecha = #" & Recordset1__MMColParam & "#")
  #16 (permalink)  
Antiguo 11/10/2007, 10:21
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

Ag! Sorry, esta mañana andaba con mucho traqueteo. Se me olvidó abrir el objeto:

Set conn = Server.CreateObject ("ADODB.Connection")
conn.ConnectionString = MM_neoparc_STRING

conn.open()

set rs = conn.execute("SELECT * FROM menu WHERE fecha = #" & Recordset1__MMColParam & "#")



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 11/10/2007 a las 13:07 Razón: ya pude :)
  #17 (permalink)  
Antiguo 11/10/2007, 10:51
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

pues me dice:

Error de Microsoft VBScript en tiempo de ejecución error '800a01a8'
Se requiere un objeto: 'cnn'

¿¿??
  #18 (permalink)  
Antiguo 11/10/2007, 12:03
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

No me deja editar el post


Bueno... ¿No reconoces un error de teclado? era conn, no cnn. La m.... o se quedó trabada.

conn.open()
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #19 (permalink)  
Antiguo 11/10/2007, 12:13
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: filtrar fecha de hoy

Cita:
Iniciado por tammander Ver Mensaje
No me deja editar el post


Bueno... ¿No reconoces un error de teclado? era conn, no cnn. La m.... o se quedó trabada.

conn.open()
Ya que sabes programar, deberías aprender a escribir mi estimado tammander nah, broma, perdón por el OT...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #20 (permalink)  
Antiguo 11/10/2007, 13:06
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: filtrar fecha de hoy

o comprarme un nuevo teclado


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #21 (permalink)  
Antiguo 15/10/2007, 01:18
 
Fecha de Ingreso: septiembre-2005
Mensajes: 202
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: filtrar fecha de hoy

...bueno...lo que me encuentro ahora es lo siguiente, donde intento recoger la info

Error de Microsoft VBScript en tiempo de ejecución error '800a01a8'
Se requiere un objeto: 'Server'
/cat/index2.asp, línea 135

la linea 135 es esta:

<%TEXT=Server.HTMLEncode(Recordset1.Fields.Item("t ext_cat").Value)
TEXT = REplace(TEXT,vbCrLf,"<br>")%>
<%=TEXT%>

salut

Última edición por potenkin; 16/10/2007 a las 08:39
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:25.