Consulta compleja en access...

Te cuento:
Tengo dos tablas en una BD, en una tengo datos de empleados (nombres, apellidos, áreas, etc...) y en otra, tengo datos de reclamos (estado del reclamo, área, numero de cliente, etc...)
Estas dos tablas se relacionan entre si mediante la columna ID, que identifica al empleado.
Lo que necesito hacer, es generar un listado con el nombre de todos los empleados que han atendido reclamos, pare esto hice el siguiente código
Es un poco largo pero entendible:
<%
SQL = "SELECT DISTINCT id FROM reclamos where estado='activo' or estado='terminado'"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
set RS = DbConn.execute(SQL)
Dim empleado
empleado=rs("id")
%>
<% Do While NOT RS.Eof %>
<%
SQL = "SELECT * FROM empleados where id="&empleado&" order by apellido_paterno asc"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
set RS = DbConn.execute(SQL)
%>
<table width="85%" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#000033" bordercolor="#808080" summary="">
<tr>
<td align="left" valign="top" id="breadcrumb" width="170"><strong><a href="detallefuncionario.asp?id=<%=""&empleado&""%>"><%=rs("apellido_paterno")%> <%=rs("apellido_materno")%></a></strong></td>
</tr>
</table>
<% RS.movenext
Loop %>
El problema esta en que solo me muestra el primer empleado que tiene reclamos y no todos...
Haciendo ajustes y desajustes, me di cuenta que al parecer el problema esta en el DIM empleados, pero no se como poder arreglar esto...
HELP!
(¿Se entendió lo que necesito?)

2 respuestas

Respuesta
1
Sucede que estas haciendo un par de errores en el código
-a-
Donde dice:
empleado=rs("id")
debe ir dentro de do while
-b-
Dentro del do while estas haciendo otra consulta, a la cual también estas llamando rs, lo cual va a hacer que se mezclen ... ¿me explico?
en resumen, vos estas haciendo :
set RS = ...
empleado=rs("id")
Do While NOT RS.Eof
set RS = ...
RS.movenext
Loop
deberia hacerse:
set RS = ...
Do While NOT RS.Eof
empleado=rs("id")
set tmpRS = ...
RS.movenext
Loop
graaaandeeeeee! Espectaculaaar!
No tienes idea la de días que llevo en esto... le pregunté a los primeros 10 expertos de la categoría lo mismo, y tu eres el único que ha dado una respuesta simple, y que funciona!
G R A C I A S ! ! ! ! !
Respuesta
1
Efectivamente solo te pilla el primer empleado, la causa es que el <% Do While NOT RS. Eof %> va para el segundo SQL y no para el primero, por lo que el primer SQL pilla el primero y no pasa al segundo porque no tiene RS.movenext para coger el siguiente.
PD: Usa una función para hacer lo que quieres, la anidación en tu casa no te ayuda.
Bueno, ¿y eso como lo hago?... estoy recién empezando en ASP (autodidacta) y la verdad es que no tengo idea de qué es lo que tengo que hacer para conseguirlo...
Después de mucho pensar logré el código que te mandé y como veras, no me resulto...
=(
Hla, yo también soy autodidacta en todo, me llevo 1 mes en saber suficiente de ASP y en 6 meses ya hasta puedo enseñar a los demás.
El ASP es igual que el VB, debes crearte una función con el código:
<% Do While NOT RS.Eof %>
<%
SQL = "SELECT * FROM empleados where id="&empleado&" order by apellido_paterno asc"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
set RS = DbConn.execute(SQL)
%>
<table width="85%" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#000033" bordercolor="#808080" summary="">
<tr>
<td align="left" valign="top" id="breadcrumb" width="170"><strong><a href="detallefuncionario.asp?id=<%=""&empleado&""%>"><%=rs("apellido_paterno")%> <%=rs("apellido_materno")%></a></strong></td>
</tr>
</table>
<% RS.movenext
Loop %>
y desde el MAIN o programa principal usa:
<%
SQL = "SELECT DISTINCT id FROM reclamos where estado='activo' or estado='terminado'"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
set RS = DbConn.execute(SQL)
Dim empleado
<% Do While NOT RS.Eof %>
empleado=rs("id")
%>
LLAMADA FUNCION PASANDOLE COMO PARAMETROS EL EMPLEADO
<% RS.movenext
Loop %>
Gracias por tu tiempo...
Te cuento que me resulto algo distinto ahora... pero no lo que necesito...
Ahora me entrega otro nombre de empleado (el que sigue en la lista) pero aun no consigo que me muestre todos...
Te mando lo que hice, ¿pero es posible que seas más específico en eso de crear una función..? (Más aún... es que vengo recién saliendo del HTML, y de VB no se nada...
Gracias!
Mi código:
<%
SQL = "SELECT DISTINCT id FROM reclamos where estado='activo' or estado='terminado'"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
set RS = DbConn.execute(SQL)
Dim empleado
Do While NOT RS.Eof
empleado=rs("id")
%>
<% RS.movenext
Loop %>
<%
SQL = "SELECT * FROM empleados where id="&empleado&" order by apellido_paterno asc"
set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open("reclamos")
set RS = DbConn.execute(SQL)
Do While NOT RS.Eof
%>
<table width="85%" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#000033" bordercolor="#808080" summary="">
<tr>
<td align="left" valign="top" id="breadcrumb" width="170"><strong><a href="detallefuncionario.asp?id=<%=""&empleado&""%>"><%=rs("apellido_paterno")%> <%=rs("apellido_materno")%></a></strong></td>
</tr>
</table>
<% RS.movenext
Loop %>
No, te dije que usaras una función
Bueno, gracias de todas formas... me queda claro porque no me funciona, pero no tengo ni idea de como usar una función como me dices...
Gracias...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas