mrbugu:
No me molesta para nada que no puedas despues de tratar, lo que me molesta es que no intentes hacer las cosas, te puse la ultima función casi de inmediato, aunque te había dicho que lo pondría en dos horas, después regresaste y pusiste el tuyo de que no te funcionó, cabe destacar que esta clase, justo como la puse, la tengo corriendo en un site, y funciona bien, es muy posible que sí, tenga uno que otro bug que no he descubierto, pues la modifico de cuando en cuando y la he utilizado para diversas cosas, pero la lógica es la misma que te mencioné desde mi primera intervención en este post.
Comentaré el código para que te familiarices con el, pero una vez que haya hecho esto, no quiero que regreses el mismo día a decir que no lo pudiste implementar solo por hacer copy & paste y que no funcione a las primeras de cambio, quiero que te tomes tu tiempo para pensar acerca del modelo planteado en esta solución y que realmente tengas la apertura para comprenderlo, no es nada del otro mundo e incluso es suceptible a muchos cambios.
La función que regresa números aleatorios ya está comentada, así que no hay necesidad de recomentarla.
Por cierto, el método de la burbuja es uno de los métodos probados y conocidos para el ordenamiento de arreglos, encuentras muchos algoritmos por toda la red, aunque es conocido también por no ser un método muy eficiente en cuanto a tiempo/recursos, pues tiene dos ciclos, el for externo servirá para recorrer tantos elementos tenga el array, y el for interno servirá para comparar por pares de valores, pero iterará 1 vez menos que el índice mayor del array, por lo tanto el número de iteraciones es exponencial, por eso comentaba que quizás convendría implementarlo con quicksort, AZ, proprcionó una subrutina en ASP, la cual también viene dentro de este post.
Código:
'Funcion para ordenar arreglo, metodo de la burbuja, recibe un arreglo
Function OrdenaArreglo(arreglo)
Dim x, y, temp
'Si es arreglo el valor que recibe la función
If isArray(arreglo) Then
'Dim temp
'Desde que x vale 0 hasta el máximo índice del arreglo
For x = 0 to uBound(arreglo)
Desde y = índice del arreglo en x + 1, hasta el máximo índice del arreglo
For y = x + 1 to uBound(arreglo)
'Si matriz en fila de x, columna 0 es mayor que fila de y, columna 0
If arreglo(x, 0) > arreglo(y, 0) Then
'Guarda valores temporales
temp = arreglo(x, 0)
temp2 = arreglo(x, 1)
'Intercambia los valores, se manejan dos columnas, 0 y 1, ya que estamos trabajando con una matriz
arreglo(x, 0) = arreglo(y, 0)
arreglo(x, 1) = arreglo(y, 1)
arreglo(y, 0) = temp
arreglo(y, 1) = temp2
End If
Next
Next
'Si no es arreglo, regresa un nulo
Else
OrdenaArreglo = Null
End If
'La función regresa a la matriz ordenada, de acuerdo a la columna 0
OrdenaArreglo = arreglo
End Function
'Función que recibe una sentencia SQL, intenta regresar una matriz con la columna 0, un valor aleatorio, columna 1, el índice resultante de un recordset
Public Function GetRandomRS(qry)
'Dimensionamos las variables necesarias
Dim ObjConn
Dim rs
Dim cmd
Dim arrRandom
Dim mtxRandom
Dim j
'Instanciamos los objetos necesarios, utilizaremos un comando parametrizado para abrir el recordset
Set ObjConn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
Set cmd = Server.CreateObject("ADODB.Command")
ObjConn.Open strConnect
cmd.ActiveConnection = ObjConn
cmd.CommandType = adCmdText
cmd.CommandText = qry
rs.CursorType = 3
'Ejecutamos el comando al abrir el recordset
rs.Open cmd
'Si se encontraron registros entonces
if not rs.EOF then
'utilizamos el método GetRows del recordset para trabajar con un arreglo
arrRandom = rs.GetRows()
'Redimensionamos un arreglo y lo convertimos en la matriz, con esta matriz trabajaremos durante todo el proceso
Redim mtxRandom(uBound(arrRandom,2), 1)
'Desde j =0 hasta el número de filas de nuestra matriz anterior
For j = 0 to uBound(arrRandom,2)
'Matriz actual(fila de j, columna 0) = número aleatorio regresado de la función RandomPwd
mtxRandom(j,0) = RandomPwd(4, false)
'Matriz actual(fila de j, columna de 1 = getrows en fila de 0, columna de j)
mtxRandom(j,1) = arrRandom(0,j)
'Itera
Next
'Solo por consistencia trasladamos nuestra matriz a arrRandom
arrRandom = mtxRandom
'Borramos la matriz mtxRandom, no la necesitamos mas
erase mtxRandom
'Envíamos la matriz a ordenarse de acuerdo al índice de 0, que es nuestro valor aleatorio
arrRandom = OrdenaArreglo(arrRandom)
'Si no hay registros, regresamos un string vacio, en realidad por consistencia de la aplicación podríamos regresar un nulo
else
arrRandom = ""
end if
'Regresamos nuestra matriz ordenada
GetRandomRS = arrRandom
End Function
Ahora si, lo que sigue solo es instanciar la clase y trabajar con las funciones, como puedes ver, no es la gran cosa, y no nos salimos del plan original, crear una matriz, generar números aleatorios, poblar la matriz con estos números en pares con los ID's de tu recordset y ordenar la matriz en base a los números aleatorios, entonces si, despues solo tienes que recorrer la matriz en la columna 1, que es la que tiene los IDS, para trabajar con ella, de manera secuencial te puede dar justo lo que tu necesitas y la idea de trabajar con la clase, es que dentro de la misma clase te crees un método ObtenerRegistros(intID) que te regrese todas las propiedades(campos) para un id dado(intID), investiga sobre la creación de propierades en VB, básicamente necesitarás Property Get y Property Let, una externa y otra interna respectivamente, además de crear una variable interna Private variable para manejar la propiedad.
Ok, mr, como puedes ver tienes un buen reto por delante, no solo hacerlo sino hacerlo mejor, de todo esto, te aseguro que si lo consigues, no solo obtendrás una gran satisfacción, sino que también el aprendizaje adquirido será súmamente significativo.
Salu2, y cualquier cosa que necesites para eso estamos, siempre y cuando quieras liarte primero un poco con el código, a mi por lo menos no me gusta dar completas las soluciones(si es que las tengo), pues no motivas la investigación y se pierde el objetivo de AYUDA dentro de una comunidad.
AZ, cuantos caracteres tengo en este??

, a lo mejor podría haber dicho la respuesta antes de mi discurso
Salú y felices líneas