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

#1 Arturo Costa Delgado
04/07/2007 - 18:21 | Informe spam
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
#2 Fernando
04/07/2007 - 19:19 | Informe spam
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
#3 Arturo Costa Delgado
04/07/2007 - 20:16 | Informe spam
Fernando escribió:
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


Bueno, si hablamos de unos 10,000 registros, probablemente se note la
lentitud, dependiendo del entorno (intranet o internet). Pero claro, el
ejemplo que te he planteado es básico. Puedes mejorar utilizando GetRows
como puedes leer en este link

http://www.aspfacil.com/articulos/110201.asp

Básicamente es cargar toda la información en arrays que luego podrás
manipular más facilmente. Al inicio resulta algo complicado adaptarse a
eso pero no tanto.

Un saludo desde Lima, Perú

ACD
Respuesta Responder a este mensaje
#4 Fernando
04/07/2007 - 20:53 | Informe spam
Perfecto! algo más que aprender...es bueno para un novatillo. Me pongo a
estudiar GetRows!
Lo que entiendo de tu post es que convierta el recordset a una nueva tabla
con getrows, y luego le aplique tu estructura de bucle, ¿no?

(lo del control de trabajo del servidor es porque es el mismo que usan los
clientes para acceder a sus datos vía web, y ya sabes que 'el cliente es lo
primero...')
Gracias otra vez



"Arturo Costa Delgado" escribió en el
mensaje news:
Fernando escribió:
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


Bueno, si hablamos de unos 10,000 registros, probablemente se note la
lentitud, dependiendo del entorno (intranet o internet). Pero claro, el
ejemplo que te he planteado es básico. Puedes mejorar utilizando GetRows
como puedes leer en este link

http://www.aspfacil.com/articulos/110201.asp

Básicamente es cargar toda la información en arrays que luego podrás
manipular más facilmente. Al inicio resulta algo complicado adaptarse a
eso pero no tanto.

Un saludo desde Lima, Perú

ACD

Respuesta Responder a este mensaje
#5 Matias Iacono
04/07/2007 - 22:04 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida