Ver Mensaje Individual
  #5 (permalink)  
Antiguo 28/08/2003, 08:49
alcarji
 
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