
28/08/2003, 08:49
|
| | Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 23 años Puntos: 0 | |
Hola otra vez:
El problema está en que tu forma de aleatorizar números devuelve números repetidos.
Te envío una modificación hecha a tu código que a primera vista funciona bien:
Código:
<% @LANGUAGE = "VBSCRIPT" %>
<%
'-----------------------------------------------------
dim objCon, dsn, objRS, numRegistros, numCampos, I
set objCon = Server.CreateObject("ADODB.Connection")
' dsn = <-- PON AQUÍ TU DSN O CADENA DE CONEXIÓN
set objRS = Server.CreateObject("ADODB.Recordset")
objCon.open dsn
randomize
'-----------------------------------------------------
objRS.open "SELECT * FROM tabla", objCON
' Cabecera de la tabla
Response.Write("<TABLE border=""1"">")
Response.Write("<TR>")
for each campo in objRS.fields
response.write("<td><b>" & campo.name & "</b></td>")
next
Response.Write("</TR>")
miTabla = objRS.GetRows
numCampos = uBound(miTabla, 1)
numRegistros = uBound(miTabla, 2)
'Liberamos los objetos ya!!
objRS.Close
set objRS = nothing
objCON.Close
set objCON = nothing
'Recorremos el vector
'Desde el primero hasta el último "registro"...
for I = 0 to numRegistros
'Abrimos una nueva fila
rndNumber = Int(RND * numRegistros)
' response.write(rndNumber & "<br>")
call imprimirRegistro(rndNumber, miTabla)
call eliminarRegistro(rndNumber, miTabla, numRegistros)
next
Response.Write("</TABLE>")
sub imprimirRegistro(posicion, byRef laTabla)
dim J
Response.Write("<TR>")
'Desde el primero hasta el último "campo"...
for J = 0 to numCampos
'Imprimo una celda para cada campo
'Response.Write("<TD>" & miTabla(J, I) & "</TD>")
response.write("<td>" & miTabla(J, posicion) & "</td>")
next
Response.Write("</TR>")
end sub
sub eliminarRegistro(posicion, byRef laTabla, byRef numRegistros)
'----------------------------------------------------------------------------------------------
' Elimina un elemento del array y redimensiona éste.
'----------------------------------------------------------------------------------------------
dim z, k
'response.write(posicion & "...<br>")
'response.write(numRegistros & "...<br>")
' Creamos un array temporal que almacenará todos los registros posteriores al que vamos a eliminar
dim tamanyoArrayTmp
tamanyoArrayTmp = numRegistros - (posicion + 1)
'response.write(tamanyoArrayTmp & "...<br>")
dim arrayTmp()
redim arrayTmp(1, tamanyoArrayTmp)
' Copiamos todos los registros posteriores al eliminado
for z = (posicion + 1) to numRegistros
for k = 0 to numCampos
arrayTmp(k, (z - (posicion + 1))) = laTabla(k,z)
next
next
' Actualizamos la cantidad de registros
numRegistros = numRegistros - 1
' Eliminamos todos los registros desde el eliminado hasta el final
redim preserve laTabla(1, posicion - 1)
' Añadimos al array original los registros restantes copiados en al array temporal
redim preserve laTabla (1, numRegistros)
for z = (posicion) to numRegistros
for k = 0 to numCampos
laTabla(k,z) = arrayTmp(k, (z - (posicion)))
next
next
end sub
%>
Ten en cuenta que no lo he depurado al 100% pero tras varias pruebas los resultados han sido buenos. Te aconsejo que lo pruebes y repruebes bien :)
__________________ Un saludo,
Alberto |