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

Encontrar en una DB

Estas en el tema de Encontrar en una DB en el foro de ASP Clásico en Foros del Web. Bien, tengo una pequeña aplicacin web, que se encarga de coger de la DB las noticias, y mostrarlas asi en la pagina principal. He conseguido ...
  #1 (permalink)  
Antiguo 27/12/2002, 09:34
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 22 años, 5 meses
Puntos: 0
Encontrar en una DB

Bien, tengo una pequeña aplicacin web, que se encarga de coger de la DB las noticias, y mostrarlas asi en la pagina principal.
He conseguido crear el codigo necesario para esto, vamos, para seleccionar en la DB WHERE FECHA = date() .
Pero el problema me viene cuando no hay noticias de hoy.
Me gustaria que en ese caso, mediante un bucle que intento hacer y no logro, vaya buscando en la DB noticias de dias anteriores, yendo progeresivamente (es decir, buscar primero de ayer, luego de anteayer...) y mostrando solo la primera que encuentre.

No soy capaz de hacer el codigo, por que no soy capaz de plantear el problema sin meter TODO dentro del bucle, eso me da error.
Se que deberia ser algo asi como
Do
diaES = day(date())
contador = 1
fechaAnterior = day(date()) - contador & "/" & month(date()) & "/" & year(date())
MyRecordset.execute(strSQL)
While Not RS.EOF
....
myrecordset.movenext
loop
loop


¿Algo asi estaria bien?
__________________
Tu portal de manga y anime.
  #2 (permalink)  
Antiguo 27/12/2002, 10:06
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Si lo he entendido... ¿muestras únicamente las noticias del día y si no hay quieres que saque las anteriores? Pues no sé si es muy práctico eso. Como no entren cada día y después de que actualices la bd, se van a perder la mitad del web :(
Bueno, al tema. Se me ocurren varios caminos, pero uno puede ser éste:
tb1: cada día que metas noticia, se añade un registro
tb2: contiene las noticias

paso 1:
conectas con tb1 y conoces el último día en que se actualizó la bd
paso 2:
conectas con tb2 y sacas los registros para ese último día

De este modo te evitas meter bucles y demás dentro del if rs.eof then... blablabla.
__________________
on error... resume next
  #3 (permalink)  
Antiguo 27/12/2002, 10:22
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 22 años, 5 meses
Puntos: 0
De hecho lo que quiero es que se muestre la noticia del dia, y si no hay de hoy, que muestre la de ayer, y si no, la de anteayer...
Pero aun asi, creo que tu idea sirve...
Tendre que ir probando... Aunque... ¿no hay otra forma usando bucles o algo?
__________________
Tu portal de manga y anime.
  #4 (permalink)  
Antiguo 27/12/2002, 10:39
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
y por que no pruebas usando un exit loop con una condicion simple?

Código:
fecha=date()
flag=true
while flag=true

 sql="select * from tabla where fecha='" & fecha & "';"
 set rs =conexion.execute(sql)
 if not rs.eof and not rs.bof then
   flag = false
 else
  fecha = dateAdd("d",-1,fecha)
 end if

wend
ASI SE SALDRA CUANDO ENCUENTRE REGISTROS SEGUN LA FECHA....

ESO SI..ANTES DE ESTO DEBES CONTROLAR SI LA TABLA POSEE REGISTROS..PORQUE SINO EL LOOP SERA INFINITO.
  #5 (permalink)  
Antiguo 27/12/2002, 14:18
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Pero eso tiene un problemilla doble. El primero es el que apuntas, que no haya posibilidad de bucle infinito por tabla vacía (o error en la condición). El segundo es que como se pase diez días sin escribir nada, va a tener qeu realizar diez conexiones antes de mostrar algo.
Por eso le puse la de la otra tabla, eso asegura dos conexiones solamente.

Meru, posibilidades con bucles hay varias, pero no son tan eficaces.
__________________
on error... resume next
  #6 (permalink)  
Antiguo 27/12/2002, 15:32
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
entonces hagamos algo mas eficiente...

porque no muestras las ultimas noticias publicadas....

utiliza MAX(fecha) en tu sql y asi solo hacemos una sola peticion a la b de datos con las ultimas noticias publicadas.

si quieres restringir la minima fecha de consulta agregale una clausula where indicandole la fecha limite de consulta.
  #7 (permalink)  
Antiguo 28/12/2002, 07:25
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 22 años, 5 meses
Puntos: 0
Creo que hare lo de las dos tablas, pero...
Una tabla guarda todas las noticias, y sus campòs son: (NEWS)
ID (autonumerico), ARCHIVO, IMAGEN, IMG_AMP_1, IMG_AMP_2, IMG_AMP_3, IMG_AMP_4, HORA, FECHA, TEMA.

La otra tabla, deberia guardar la ultima noticia, asi que tendria que tener la ultima noticia, pero... ¿como hago para que el ID se actualize tambien? ¿Cojo el ID de NEWS y lo meto aqui? Y luego, con las noticias, lo unico que hago es un UPDATE en vez de ADDNEW ¿no?

Gracias!
__________________
Tu portal de manga y anime.

Última edición por meru-kun; 28/12/2002 a las 08:19
  #8 (permalink)  
Antiguo 28/12/2002, 23:49
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Vaya, ya está. Mira que soy burra a veces Viendo el diseño de tu tabla me ha venido de golpe. Si es queeee...

ok... pues hazlo así:

0.
Te recomiendo que uses getrows. Te lo pongo con el recordset pero deberías hacer el cambio.

1. sql:
En la sql le metes un ORDER BY fecha, hora DESC;
Aunque supongo que coges los datos fecha y hora cuando publicas, así que te bastaría en realidad con un ORDER BY id DESC;

2. código:

Código:
do while not rs.eof
  if fecha<>rs("fecha") then
    exit do
  end if

  (...) 'muestra noticia, etc

  fecha=rs("fecha")
  myrecordset.movenext
loop
__________________
on error... resume next

Última edición por korev; 28/12/2002 a las 23:53
  #9 (permalink)  
Antiguo 29/12/2002, 14:07
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Pues no sé si es por el vino de la bodega de Sepulman o si es que programar tocando a fin de año no puede ser sano, pero yo no veo el do while... tal y tal en ningún sitio

Intenta poner el bucle entero desde que abres el recordset hasta que lo cierras, pero quitándole el html irrelevante porque sino va a ser confuso y eterno.
__________________
on error... resume next
  #10 (permalink)  
Antiguo 29/12/2002, 16:02
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 22 años, 5 meses
Puntos: 0
Código:
 <% Set MyRecordSet = MyConn.Execute(strSQLHoy) %>
<% 
  Do while not MyRecordset.EOF
  If txtFechaHoy <> MyRecordset("FECHA") then
    exit do
  else %>
<!-- Aqui el codigo de coger las secciones etc....
<%  end if
  txtFechaHoy = MyRecordset("FECHA")
  myrecordset.movenext
loop
myrecordset.close
%>
__________________
Tu portal de manga y anime.
  #11 (permalink)  
Antiguo 29/12/2002, 16:51
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
Un consejo: cuando pruebes no hagas inventos
Piensa que quien responde no ve tu pc, no ve tu código completo, y no ve lo que te sale en el navegador. Si uno sugiere y el otro lo coge y lo cambia, quien sugiere se pierde y así no hay forma de seguirle el error al código

Veamos, tenemos esto:

Código:
do while not rs.eof
  if fecha<>myrecordset("fecha") then
    exit do
  end if

  (...) 'muestra noticia, etc

  fecha=myrecordset("fecha")
  myrecordset.movenext
loop
(Corregido ahora el error obvio en myrecordset entre éste y rs)


Haz esto y dinos si chuta o no chuta:

<%

Set MyRecordSet = MyConn.Execute(strSQLHoy)

Do while not MyRecordset.EOF
If txtFechaHoy <> MyRecordset("FECHA") then
exit do
end if

'Aqui el codigo de coger las secciones etc....

txtFechaHoy = MyRecordset("FECHA")
myrecordset.movenext
loop
myrecordset.close

%>

1.
En el código html tienes que revisarlo. Mira si te has dejado un tag por el camino tipo </td> o si fue tipo <tr sin el > después. Cosas de ese estilo. Depende del que sea, cómo y dónde, provoca rarezas distintas a simples cortes en las tablas y tal.
2.
Veo que cambias la variable fecha por txtFechaHoy. En realidad no es fecha de hoy sino una fecha, la última en que se publicó algo. Este cambio me hace suponer que puede haber alguna cosilla más por ahí en relación con las fechas. Si es así elimínalo, el problema que tenías queda resuelto con ese do while
3.
¿Porqué eliminas un mensaje posteado? El html no era necesario, pero ya que estaba iba bien para dar pistas sobre cómo programas y por tanto el posible caminito al error.

Saludos.
__________________
on error... resume next
  #12 (permalink)  
Antiguo 02/01/2003, 06:49
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 22 años, 5 meses
Puntos: 0
kOREV, he provado con tu codigo, y nada, no se muestra nada... :(

La variable strSQLHoy es:ç
strSQLHoy = "SELECT ID, ARCHIVO, FECHA, IMAGEN, TEMA, HORA FROM NEWS WHERE FECHA= " & "#" & txtFechaEs &"#" & " AND HORA ="
strSQLHoy = strSQLHoy & "'" & txtHoraAprox & "'" & "ORDER BY HORA, FECHA DESC"


Y luego el codigo que uso es:
Código:
<% Set MyRecordSet = MyConn.Execute(strSQLHoy) %>
<% 
  Do while not MyRecordset.EOF
  If txtFechaLast <> MyRecordset("FECHA") then
    exit do
  end if %>
<!-- codigo html -->
<%  
  txtFechaLast = MyRecordset("FECHA")
  myrecordset.movenext
loop
myrecordset.close
%>
He cambiado la variable txtFechaHoy por txtFechaLast, pero de todas maneras, esa variable no tiene ningun valor, es una variable a 0, asi que suopngo que ahi estara el problema...
__________________
Tu portal de manga y anime.
  #13 (permalink)  
Antiguo 02/01/2003, 08:03
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
El código que te di es precisamente para no tener que conocer la fecha, que lo haga automático.
Por tanto...

Código:
strSQLHoy = "SELECT ID, ARCHIVO, FECHA, IMAGEN, TEMA, 
HORA FROM NEWS ORDER BY HORA, FECHA DESC;"

<%

Set MyRecordSet = MyConn.Execute(strSQLHoy)

'le faltaba esta línea, porque sino txtfechalast siempre será distinto.
txtFechaLast = MyRecordset("FECHA")

Do while not MyRecordset.EOF
  If txtFechaLast <> MyRecordset("FECHA") then
    exit do
  end if

%>
<!-- codigo html -->
<%  

  txtFechaLast = MyRecordset("FECHA")
  myrecordset.movenext
loop
myrecordset.close

%>
__________________
on error... resume next
  #14 (permalink)  
Antiguo 02/01/2003, 08:34
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 22 años, 5 meses
Puntos: 0

Muchisimas gracias a todos (bueno, especialmente Korev, que ha sido la que mas ha ayudado), opr que por fin funciona el codigo.
Ahora entiendo como va, y aunque me ha costado hacerlo, pues ahora por fin hemos hecho algo que funciona.

Bueno, en serio, muchisimas gracias!
__________________
Tu portal de manga y anime.
  #15 (permalink)  
Antiguo 02/01/2003, 08:39
Avatar de korev  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 127
Antigüedad: 22 años, 4 meses
Puntos: 0
aysssss (suspiro)... año nuevo, código que funciona...

De nada
__________________
on error... resume next
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 12:30.