** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Recorset que busca registros aleatorios
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRecorset que busca registros aleatorios

 Responder Responder
Autor
Mensaje
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Tema: Recorset que busca registros aleatorios
    Enviado: 12/Julio/2018 a las 17:47
Buen día amigos, cordial saludo para todos

Tengo este caso que no he podido resolver haber si me pueden pegar una ayudadita:

Tengo un formulario llamado "Premios"  y la tabla con el mismo nombre, también tengo otra tabla que se llama "Nombres". ¿que estoy buscando hacer? que cuando haga clic en un botón de comando genere por medio de un Recordset una barrido en la tabla "Nombres" y me escoja un nombre de forma aleatoria y luego lo pegue en un campo llamado "Ganador"en el formulario. Esta operación se debe repetir cada vez que haga clic en el botón escogiendo aleatoriamente un nuevo nombre. 

Tengo este código de referencia para el Recordset 


 Set record = BaseDatos.OpenRecordset("Nombres", dbOpenTable)
    record.Index = "PrimaryKey"


agradezco su ayuda, grcias.
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: en línea
Puntos: 4623
Enlace directo a este mensaje Enviado: 12/Julio/2018 a las 18:41
Hola MichaelMG

Existe una función para que te de aleatorios se llama Rnd, en la ayuda de access (F1) explica como usarla, pero es sobre números, tu tabla de nombres me imagino que tiene un id numérico, este es el que debes usar y después con un Dlookup poner el nombre que corresponde al numero, no es mala idea que mires también la función Randomize para que no te sorprenda Rnd y te de siempre los mismos resultados.

Saludos.
Arriba
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 15:03
Muchas gracias emiliove, lo soluciones usando el siguiente código en el evento después de actualizar en el campo Nombre y cree un bucle con la función Rnd, la única duda que me queda es en relación a la función Randomize. 

El código de ejecuta muy rápido y no consume casi recursos. 

Nombre.Value = DLookup("[NombreCampoForm]", "[TablaDeBusqueda]", "ID_CLIENTE=" & ID_CLIENTE)
Arriba
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 15:04
creo que se puede cerrar el hilo
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: en línea
Puntos: 4623
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 15:51
Mira lo que dice la ayuda: Si no utiliza la instrucción Randomize, la función Rnd (sin argumentos) utiliza el mismo número como valor de semilla la primera vez que se la invoca, usando después como valor de semilla el último número generado.
Así que siempre que abres por primera vez tu aplicación obtendrás el mismo resultado, y lo deberías de hacer:


Dim LRandomNumber As Integer

Randomize
LRandomNumber = Int((Límite_superior - límite_inferior + 1) * Rnd + límite_inferior)


Editado por emiliove - 13/Julio/2018 a las 15:58
Arriba
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 20:59
Nuevanete gracias emiliove, lo hice de la siguiente forma

Dentro del campo ID_ICLIENTE agregue el código que usted me envió en el evento al hacer click así: 

Nombres.Value = DLookup("[Nombres]", "[Clientes]", "ID_CLIENTE=" & ID_CLIENTE)


Luego cree un boton de comando e incluí el siguiente código:


Dim LRandomNumber As Integer

LRandomNumber = Int((1504 - 1 + 1) * Rnd + 1)

ID_ICLIENTE.Value = LRandomNumber


Call ID_CLIENTE_Click


El código es muy eficiente 

Saludos amiliove y gracias. 







Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: en línea
Puntos: 4623
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 21:07
Pues no veo donde pusiste el Randomize, y si agregas mas Nombres, solo tienes que termine hasta el 1504, deberías de poner un DCount para contar y que siempre comience en el último.

Saludos.
Arriba
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 23:34
Gracias emiliove nuevamente, la verdad el numero de registro es fijo 1504, si fuera ilimitado lo pasaría como una variable declarada de tipo Integer con un DCount como lo indicas 

Pero si observas aquí uso la variable LRandomNumber  para que me genere un numero aleatorio en el campo de ID_ICLIENTE del formulario GANADORES, luego con el DLookup me carga el nombre del cliente asociado al ID_ICLIENTE de la tabla CLIENTES, debo aclarar que el campo ID_ICLIENTE lo puse en las dos tablas en la tabla clientes por ser su identificador y en la tabla GANADORES y por ende en el formulario, por eso en el boton de comando encuentras este código:
 
'genera numero aleatorio en el campo ID_ICLIENTE

Dim LRandomNumber As Integer

LRandomNumber = Int((1504 - 1 + 1) * Rnd + 1)

ID_ICLIENTE.Value = LRandomNumber

' autoclick en el campo  ID_CLIENTE para que ejecute el DLookup y cargue el nombre del ganador en otro campo llamado NOMBRES

Call ID_CLIENTE_Click


El codigo que esta en el evento al hacer click del campo ID_CLIENTE es el siguiente que desde luego se genera con el Call.

Nombres.Value = DLookup("[Nombres]", "[GANADORES]", "ID_CLIENTE=" & ID_CLIENTE)

Gracias y disculpas por si no he sabido explicar...


Saludos.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 4729
Enlace directo a este mensaje Enviado: 13/Julio/2018 a las 23:50
Hola!

otra opción es crear un formulario independiente, insertas un cuadro de lista cuyo origen de la fila pones:

= SELECT TOP 1 * FROM Nombres ORDER BY Rnd(Int(ID_CLIENTE));

y con un botón de comando para actualizar el cuadro de lista cada vez que quieras un ganador.

Un Saludo.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 4729
Enlace directo a este mensaje Enviado: 14/Julio/2018 a las 00:10
Un Saludo.
Arriba
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Enviado: 14/Julio/2018 a las 00:46
Gracias mounir, el ejemplo esta interesante por su simplicidad en código, solo faltaria almacenar el dato que se carga aleatoriamente en en campo para que quede el registro del ganador.

Saludos.
 
Arriba
MichaelMG Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Junio/2018
Localización: Colombia
Estado: Sin conexión
Puntos: 40
Enlace directo a este mensaje Enviado: 04/Agosto/2018 a las 04:07
Se puede cerrar este hilo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable