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

GetRows ++

Estas en el tema de GetRows ++ en el foro de ASP Clásico en Foros del Web. SAULDOS! Éste es mi segundo post en éstos foros . . . el primero aunque lleva varias visitas nadie me contesta . . . Ésta ...
  #1 (permalink)  
Antiguo 11/08/2008, 22:11
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 10 meses
Puntos: 4
GetRows ++

SAULDOS!

Éste es mi segundo post en éstos foros . . . el primero aunque lleva varias visitas nadie me contesta . . .

Ésta vez compartiré un problemita que tengo con el vector GetRows . . .

GetRows es mi forma favorita de imprimir los datos de una base de datos (manejo MySQL con ASP) . . .
El problema viene al anidar consultas . . . aunque odio hacerlo por la carga de información con la que cuento, llegó una parte donde debo hacerlo . . . lo malo es que no he podido solucionar el Error . . . y como tengo Vista con IIS 7, me muestra la página de errores detallados con los campos del error en blanco (raro) . . .

Ok . . . tal vez lo pueda solucionar con una consulta que no logro deducir . . .
La cosa está así:

TABLA1:
idx | y | suby |
1 116 125


TABLA2
idy | nomy |
1 Kraken


Hago una consulta compuesta para verificar el IDY de la tabla2 con Y de la tabla1 . . .
Después dentro del while not XY.eof Tengo que anidar una consulta a la tabla2 para que en lugar de arrojarme SUBY (numérico) me arroje el NOMY . . . ya que la relación IDY con Y y IDY con SUBY es exactamente la misma . . .

usando el tardado proceso de WHILE NOT XXX.EOF . . . tarda demasiado en abrir . . .
Pero con GetRows me sale un error que no puedo corregir . . .

Alguna idea ? ? ? . . .
Si la cosa va por la consulta decirme para postear mi problema en la sección MySQL . . .

Muchas gracias . . . espero ésta vez si me contesten . . .
  #2 (permalink)  
Antiguo 11/08/2008, 22:38
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Respuesta: GetRows ++

cuando utilizas GETROWS, no es necesario ya utilizar el ciclo para las respuestas, la forma de utilizar es la siguiente

Cita:
consulta="select campo1,campo2,campo3, campo4 from tabla where campo1='pepe'"
set RS = conexion.execute(consulta)
resultados = RS.getrows
rs.close
conexion.close
y listo....

ahora para manipulacion de los resultados de un GETROWS, existe una rutina mediante ciclos FOR, ya que el resultado esta dentro de una MATRIZ BIDIMENSIONAL, y dependiendo de los campos que estes solicitando sera el tamaño de esta matriz

por ejemplo
tomado de la pagina que esta anteriormente escrita
Cita:
'Recorremos el vector
'Desde el primero hasta el último "registro"...
for I = 0 to UBound(resultados,2)
'Abrimos una nueva fila
'Desde el primero hasta el último "campo"...
for J = 0 to Ubound(resultados, 1)
'Imprimo una celda para cada campo
resultados(J, I)
next
next
espero te sirva la guia,
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 11/08/2008, 23:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: GetRows ++

Saludos . . . y muchas gracias por responder . . .

Lo que me comentas lo tengo . . . sin problemas . . . de hecho te digo que la consulta inicial si me la ejecuta

El problema sería cuando tengo que anidar una segunda consulta para que me coloque el nombre de SUBY en ligar del IDY . . .

Te coloco mi código de impresión de datos para dar un mejor panorama:
En rojo la consulta que debo anidar . . . en Verde lo que debo sustituir por la matriz de la consulta anidada

Cita:
<% for I = 0 to UBound(toda,2)
dt = DateDiff("d", CDate(toda(fecha,I)), date)
if (dt > 1) and (toda(asignado,I) = "0") then
fondo = "#FFF0F0"
fondov = "#ffb0b0"
fondou = "#FFF0F0"
fontov = "#ffffde"
fontou = "#666666"
else
diascoment = DateDiff("H", CDate(toda(ultcom,I)), date)
if diascoment <= 24 then
img = "imagenes/png/ok.png"
elseif (diascoment > 24) and (diascoment <= 72) then
img = "imagenes/png/warning.png"
else
img = "imagenes/png/error.png"
end if
fondo = "#ffffff"
fondov = "#f0f0ff"
fondou = "#ffffff"
fontov = "#0099CC"
fontou = "#666666"
end if
consulta = "select nombrecliente from clientes where idcliente="& toda(subcliente,I)
Set subcli = conexion.execute(consulta)
nomsub = subcli.GetRows
subcli.close
nomsubcliente = 0

%>
<TR height="25" bgcolor="<%=fondo%>" OnMouseOver=bgColor='<%=fondov%>';style.cursor='ha nd';style.color='<%=fontov%>';style.border='solid' OnMouseOut=bgColor='<%=fondou%>';style.cursor='def ault';style.color='<%=fontou%>' class="text" onClick="self.location.href='index.asp'">
<td><img border ="0" src="<%=img%>" align="left" alt="La solicitud se coment&oacute; por &uacute;ltima vez el d&iacute;a: <%=Day(toda(ultcom,I))%> de <%=mes(Month(toda(ultcom,I)))%> de <%=Year(toda(ultcom,I))%> a las <%=Hour(toda(ultcom,I))%>:<%=Minute(toda(ultcom,I) )%>"><b><%=toda(solicitud,I)%></b></td>
<td><%=toda(cliente,I)%> </td>
<td><%=toda(subcliente,I)%></td>
<td><%=toda(investigado,I)%></td>
<td><% if asignado = 0 then Response.Write("---") else Response.Write(toda(asignado,I)) end if %></td>
<td align="right"><%=Day(toda(fecha,I)) & "/" & left(mes(Month(toda(fecha,I))),3) & "/" & Year(toda(fecha,I)) %></td>
</TR>
<% next %>
</table>

Y una vez mas . . . Grax por la respuesta

Última edición por NA1TM3R; 11/08/2008 a las 23:24
  #4 (permalink)  
Antiguo 12/08/2008, 07:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: GetRows ++

A ver, a ver, a ver ......

A golpe de vista ese código pareciera que estar recorriendo una matriz que contiene un RecordSet y por cada fila () haces otra consulta y esta a su vez quieres colocarla a manera de maestro-detalle ... ¿es correcto?

Si es así, independientemente del diseño que posiblemente sea el que esta mal ya que a lo mejor ocupas un filtro de manera inicial para que el contenido del Array "toda" no sea tan grande, se me ocurre que hagas solo una lectura y solo un barrido.

No se cual sea la consulta que alimenta a "toda" pero seguro puedes agruparlo con clientes para tener un maestro-detalle en un solo recordSet, y en una sola barrida y llevando una variable con el valor del toda(subcliente,I) anterior puedes detectar cuando cambie para pintar de nuevo los encabezados, así no harás tantas llamadas al server y no sería tan tardado.

Si no es así y no entendí en realidad favor de hacer caso omiso
  #5 (permalink)  
Antiguo 13/08/2008, 23:08
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: GetRows ++

Saludos Myakire ! ! !

Gracias por la respuesta . . . y si . . . intento hacer una sola lectura y un sólo barrido para ahorrarme todo el tiempo posible de carga . . .

Lo que se encuentra en el Arreglo toda es una consulta MySQL . . .
En la cuál relaciono 3 tablas, pero sólo es un dato el que debo volver a consultar por cada dato arrojado en el ciclo que hago . . .
Según yo no se puede arrojar el resultado deseado en el SELECT, ya intenté de todo . . .

Lo que sucede es que en la tabla 1 tengo puros números (keys).
En la tabla 2 está la key que relaciono con la tabla1 para aventar el nombre en lugar del dato numérico a la columna cliente . . . sin problemas . . . aquí la cuestión viene cuando Necesito re-relacionar el mismo key de la tabla2 para arrojar el nombre relacionado con otra columna de la tabla1 subcliente . . .

ejemplo:


Tabla1:
asunto - 1
Cliente - 5
Subcliente - 8



Tabla2:
idcliente - 5 || Nombre - Mark
idcliente - 8 || Nombre - Hunter


Resultado:
Asunto:1 || Cliente:Mark || Subcliente: Hunter

Es entonces cuando veo que necesito hacer otra lectura la cuál quería evitar :( . . .

Creo que no me explico mucho verdad ? ? ?

Espero alguien me aclare el camino . . . hehe . . . como lo ven . . . es algo borroso por ahora . . .

Gracias por su tiempo . . .
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 14:52.