Control de salida en pantalla de datos: Recordset, Do While, If ... algo falla

04/07/2007 - 18:04 por Fernando | Informe spam
Como mero aficionado que soy, tengo problemas de novato.of course!!



Tengo un recordset con unos datos que quiero presentar de la siguiente forma



Datos del recordset:



Nombredelcentro Nombreempleado Fechabaja

Madrid Pepe1 01022007

Madrid Pepe2 01022007

Madrid Pepe3 01022007

Corboba Pepe4 01022007

Cordoba Pepe5 01022007

Barcelona Pepe6 01022007

Barcelona Pepe7 01022007

Barcelona Pepe8 01022007





Presentación deseada:



Centro de Trabajo: Madrid

Nombreempleado Fechabaja

Pepe1 01022007

Pepe2 01022007

Pepe3 01022007



Centro de Trabajo: Cordoba

Nombreempleado Fechabaja

Pepe4 01022007

Pepe5 01022007



Centro de Trabajo: Barcelona

Nombreempleado Fechabaja

Pepe6 01022007

Pepe7 01022007

Pepe8 01022007





Para hacerlo he preparado el siguiente código de Novato (que no funciona.por
eso estoy preguntando. Sólo me sale el primer bloque de registros: el que
corresponde al primer centro de trabajo)



(quito del código las etiquetas html que controlan la salida en pantalla de
los datos.)



<%@language=VBScript%>



<%



Set rsdatos = Server.CreateObject("ADODB.Recordset")

rsdatos.Open todaselect , db , adOpenDynamic



do while not rsdatos.eof

Response.Write rsdatos.Fields("Nombredelcentro")



controlcentro=rsdatos.Fields("Nombredelcentro")

controlcentro2=controlcentro



do while not rsdatos.eof



if controlcentro2=controlcentro then



Response.Write
rsdatos.Fields("nombreempleado")

Response.Write
rsdatos.Fields("fechabaja")

end if



rsdatos.movenext



if rsdatos.eof=false then

controlcentro2=rsdatos.Fields("Nombredelcentro ")



end if



loop



loop



rsdatos.close



%>





Gracias por sus respuestas



Fernando

Preguntas similare

Leer las respuestas

#6 Fernando
05/07/2007 - 10:15 | Informe spam
Gracias a los dos por vuestros aportes!

Me estudiaré lo del GetRows para seguir aprendiendo...
El codigo de Matías me funciona perfectamente (sólo he tenido que cambiar
'rs.eof 'por 'rs.movenext')

Saludos al grupo

Fernando


"Matias Iacono" escribió en el
mensaje news:
Efectivamente, consultar por cada iteracion puede traerte problemas de
rendimientos.

Si bien, existen muchas formas de hacerlo, aca va otra con el set de datos
que tienes en este momento:

<table>
<%
Dim CentroAnterior
CentroAnterior = ""

do while not rs.eof
if CentroAnterior <> rs("Nombredelcentro") then
%>
<tr><td collspan="2">Centro de Trabajo:
<%=rs("Nombredelcentro")%></td></tr>
<tr><td>Nombre Empleado</td><td>Fecha baja</td>
<%
CentroAnterior = rs("Nombredelcentro")
end if
%>
<tr>
<td><%=rs("Nombreempleado")%></td>
<td><%=rs("Fechabaja")%></td>
</tr>
<%
rs.eof
loop
%>
</table>

Aunque no lo he probado creo que va por ahi.

Saludos.

Matías Iacono
Microsoft MVP
Orador Regional INETA
http://mvpfiles.spaces.live.com


"Fernando" wrote:

> Gracias por tu contestación; creo que lo he entendido y haré una prueba
> mañana (acá es la tarde ya! )
> Pero tengo una duda sobre el rendimiento: con tu código el servidor hace


una
> select por cada centro de trabajo... eso no empeora el rendimiento? Con


el
> código que ya intentaba preparar también quería tener en cuenta ese
> parámetro, para que los 'guardianes de la red' (ya sabes: el dpto. de
> informática...) no se me quejaran.
>
> Gracias
>
> Fernando
>
>
>
>
>
> "Arturo Costa Delgado" escribió en el
> mensaje news:O$
> > Buenos días:
> > Si te he entendido bien, tu quieres presentar el listado agrupados por
> > ciudades y a 2 columnas (nombre y fecha de baja).
> > Bueno, la sintaxis que yo utilizo es totalmente distinta a la tuya,


pero
> > creo que podré darte al menos una idea.
> >
> > Yo utilizo primero un archivo db.asp en incluyo las líneas de


conexión.
> > Este archivo tiene esta estructura:
> >
> > <%
> > Dim Conexion,Tabla
> > Set Conexion=Server.CreateObject("adodb.connection")
> > Set Tabla1=Server.CreateObject("adodb.recordset")
> > Set Tabla2=Server.CreateObject("adodb.recordset")
> > Set Tabla3=Server.CreateObject("adodb.recordset")
> > Conexion.open "Provider=Microsoft.Jet.OLEDB.4.0; Data
> > Source=f:\inetpub\base de datos\MiBaseDeDatos.mdb"
> > %>
> >
> > Explicado esto te paso a mostrar el código que usaría en la página
> > LISTADO.ASP que es el nombre que usare como ejemplo
> >
> >
> >
> > LISTADO.ASP
> > <!-- #include file="setup/db.asp" -->
> >
> > <%
> > Temp1="Select Distinct Nombredelcentro From TablaDeUsuarios"
> > Tabla1.Open Temp1, Conexion
> > While Not Tabla1.EOF
> > %>
> >
> > Centro de Trabajo: <%= Tabla1.Fields("Nombredelcentro") %><br>
> > <table>
> > <tr>
> > <td>Nombre del Empleado</td>
> > <td>Fecha de Baja</td>
> > </tr>
> >
> > <%
> > Temp2="Select * From TablaDeUsuarios Where Nombredelcentro='" &
> > Tabla1.Fields("Nombredelcentro") & "'"
> > Tabla2.Open Temp2, Conexion
> > While Not Tabla2.EOF
> > %>
> >
> > <tr>
> > <td><%= Tabla1.Fields("Nombreemmpleado") %></td>
> > <td><%= Tabla1.Fields("Fechabaja") %></td>
> > </tr>
> >
> > <%
> > Tabla2.MoveNext
> > Wend
> > Tabla2.Close
> >
> > Response.Write("</table><br>")
> >
> > Tabla1.MoveNext
> > Wend
> > %>
> >
> > Espero haberte sido de utilidad.
> > Un saludo desde Lima, Perú
> >
> > ACd
>
>
>
Respuesta Responder a este mensaje
#7 Matias Iacono
05/07/2007 - 13:50 | Informe spam
Ups... se me escapo eso. Casi te mato el servidor con un bucle infinito :)
Matías Iacono
Microsoft MVP
Orador Regional INETA
http://mvpfiles.spaces.live.com


"Fernando" wrote:

Gracias a los dos por vuestros aportes!

Me estudiaré lo del GetRows para seguir aprendiendo...
El codigo de Matías me funciona perfectamente (sólo he tenido que cambiar
'rs.eof 'por 'rs.movenext')

Saludos al grupo

Fernando


"Matias Iacono" escribió en el
mensaje news:
> Efectivamente, consultar por cada iteracion puede traerte problemas de
> rendimientos.
>
> Si bien, existen muchas formas de hacerlo, aca va otra con el set de datos
> que tienes en este momento:
>
> <table>
> <%
> Dim CentroAnterior
> CentroAnterior = ""
>
> do while not rs.eof
> if CentroAnterior <> rs("Nombredelcentro") then
> %>
> <tr><td collspan="2">Centro de Trabajo:
> <%=rs("Nombredelcentro")%></td></tr>
> <tr><td>Nombre Empleado</td><td>Fecha baja</td>
> <%
> CentroAnterior = rs("Nombredelcentro")
> end if
> %>
> <tr>
> <td><%=rs("Nombreempleado")%></td>
> <td><%=rs("Fechabaja")%></td>
> </tr>
> <%
> rs.eof
> loop
> %>
> </table>
>
> Aunque no lo he probado creo que va por ahi.
>
> Saludos.
>
> Matías Iacono
> Microsoft MVP
> Orador Regional INETA
> http://mvpfiles.spaces.live.com
>
>
> "Fernando" wrote:
>
> > Gracias por tu contestación; creo que lo he entendido y haré una prueba
> > mañana (acá es la tarde ya! )
> > Pero tengo una duda sobre el rendimiento: con tu código el servidor hace
una
> > select por cada centro de trabajo... eso no empeora el rendimiento? Con
el
> > código que ya intentaba preparar también quería tener en cuenta ese
> > parámetro, para que los 'guardianes de la red' (ya sabes: el dpto. de
> > informática...) no se me quejaran.
> >
> > Gracias
> >
> > Fernando
> >
> >
> >
> >
> >
> > "Arturo Costa Delgado" escribió en el
> > mensaje news:O$
> > > Buenos días:
> > > Si te he entendido bien, tu quieres presentar el listado agrupados por
> > > ciudades y a 2 columnas (nombre y fecha de baja).
> > > Bueno, la sintaxis que yo utilizo es totalmente distinta a la tuya,
pero
> > > creo que podré darte al menos una idea.
> > >
> > > Yo utilizo primero un archivo db.asp en incluyo las líneas de
conexión.
> > > Este archivo tiene esta estructura:
> > >
> > > <%
> > > Dim Conexion,Tabla
> > > Set Conexion=Server.CreateObject("adodb.connection")
> > > Set Tabla1=Server.CreateObject("adodb.recordset")
> > > Set Tabla2=Server.CreateObject("adodb.recordset")
> > > Set Tabla3=Server.CreateObject("adodb.recordset")
> > > Conexion.open "Provider=Microsoft.Jet.OLEDB.4.0; Data
> > > Source=f:\inetpub\base de datos\MiBaseDeDatos.mdb"
> > > %>
> > >
> > > Explicado esto te paso a mostrar el código que usaría en la página
> > > LISTADO.ASP que es el nombre que usare como ejemplo
> > >
> > >
> > >
> > > LISTADO.ASP
> > > <!-- #include file="setup/db.asp" -->
> > >
> > > <%
> > > Temp1="Select Distinct Nombredelcentro From TablaDeUsuarios"
> > > Tabla1.Open Temp1, Conexion
> > > While Not Tabla1.EOF
> > > %>
> > >
> > > Centro de Trabajo: <%= Tabla1.Fields("Nombredelcentro") %><br>
> > > <table>
> > > <tr>
> > > <td>Nombre del Empleado</td>
> > > <td>Fecha de Baja</td>
> > > </tr>
> > >
> > > <%
> > > Temp2="Select * From TablaDeUsuarios Where Nombredelcentro='" &
> > > Tabla1.Fields("Nombredelcentro") & "'"
> > > Tabla2.Open Temp2, Conexion
> > > While Not Tabla2.EOF
> > > %>
> > >
> > > <tr>
> > > <td><%= Tabla1.Fields("Nombreemmpleado") %></td>
> > > <td><%= Tabla1.Fields("Fechabaja") %></td>
> > > </tr>
> > >
> > > <%
> > > Tabla2.MoveNext
> > > Wend
> > > Tabla2.Close
> > >
> > > Response.Write("</table><br>")
> > >
> > > Tabla1.MoveNext
> > > Wend
> > > %>
> > >
> > > Espero haberte sido de utilidad.
> > > Un saludo desde Lima, Perú
> > >
> > > ACd
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida