Selección aleatoria de registros

Discute sobre las herramientas de la base de datos

Selección aleatoria de registros

Notapor JosechuPuerta » Lun Ene 13, 2020 6:56 pm

Hola compañeros, en primer lugar presentarme: me llamo Josechu y soy principiante en OpenOffice Base (aunque tenía cierta experiencia en Acces, versiones antiguas) y agradezco de antemano la ayuda que me podáis brindar para ir sacándole partido al soft.

En fin, a lo que me trae aquí. He buscado soluciones por todas partes pero no encuentro nada. Puede que ni siquiera se pueda hacer con esta herramienta.

La cuestión es que tengo una base de datos en la que voy registrando preguntas y respuestas tipo test de las pruebas que le pongo a unos alumnos que tengo en una academia. La idea, ahora, es conseguir hacer una selección aleatoria de X preguntas del tema Y (o bien de todos los temas) y de esa forma tener los simulacros de examen de forma automática.

Se trataría de tener un diálogo en el que el sistema pregunte por el tema (hay una tabla con los temas asociada a la de preguntas) y que solicite también el número de preguntas a seleccionar (insisto, de forma aleatoria) y lo presente en un formato predeterminado.

¿Esto es posible hacerlo con Base?

Gracias, de nuevo por vuestra atención y vuestro tiempo.

Un saludo.

Josechu Puerta
OpenOffice 4.1.6/LibreOffice 6.3.4.2 en MacOs 10.14.6
JosechuPuerta
 
Mensajes: 6
Registrado: Lun Ene 13, 2020 6:24 pm

Re: Selección aleatoria de registros

Notapor RMG » Lun Ene 13, 2020 7:13 pm

Hola

Sí, es posible.

Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Selección aleatoria de registros

Notapor JosechuPuerta » Lun Ene 13, 2020 7:35 pm

Gracias RMG por tu atención.

Yo he conseguido (con los manuales no es difícil) realizar una consulta con parámetros (es decir, me pide que le indique de qué tema tiene que seleccionar las preguntas), pero de ahí no he pasado.

¿Podrías orientarme que pasos serían los siguientes?

He de decir que, aunque hable de una academia, es una labor totalmente desinteresada. Preparamos a chavales para que se cualifiquen profesionalmente. Por eso el interés en hacer la base de datos de preguntas y que estas queden siempre a disposición de los orientadores y preparadores.

Un saludo.

JosechuPuerta
OpenOffice 4.1.6/LibreOffice 6.3.4.2 en MacOs 10.14.6
JosechuPuerta
 
Mensajes: 6
Registrado: Lun Ene 13, 2020 6:24 pm

Re: Selección aleatoria de registros

Notapor RMG » Mar Ene 14, 2020 11:00 am

Hola,

En este enlace tienes las funciones que se pueden aplicar en las consultas en Base, en las numéricas tienes la función RAND() que devuelve un número aleatorio, particularmente nunca la he usado en Base, pero si no es aplicable a lo que quieres hacer, puedes adjuntar un pequeño ejemplo explicando lo que que quieres conseguir, para ver como te podemos ayudar.

https://wiki.open-office.es/Funciones_i ... ffice_Base

Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Selección aleatoria de registros

Notapor RMG » Mar Ene 14, 2020 7:05 pm

Hola,

Puesto que nunca he usado la función aleatoria RAND(), he querido probar para ver de su utilidad. Te adjunto una posible solución a lo que entiendo que quieres hacer.

A traves de un formulario y un botón, cargas una consulta con datos aleatorios del tema seleccionado, así como la cantidad de registros que le pides. Espero que te sirva.

Saludos
Adjuntos
SeleccionAleatoria.zip
(11.8 KiB) 26 veces
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Selección aleatoria de registros

Notapor JosechuPuerta » Mar Ene 21, 2020 1:54 pm

Hola de nuevo RMG.
Ya he probado lo que me has mandado y, aunque, en principio, no resuelve directamente mi necesidad, si que me ha servido como base para una solución, al menos provisional, mientras que voy averiguando como hacerlo más definitivo y/o elegante.

Adjunto te envío mi base de datos (no todos los registros, claro) y lo que yo estaba trabajando, además de la implementación de tu solución. Como puedes ver, hay dos consultas una (Consulta_preguntas*Tema) es la primera que yo hice; como observarás al introducir el criterio en la columna IDTema de la consulta, al ejecutar, pregunta de que tema queremos que se seleccionen las preguntas. Hasta ahí correcto.
Mi intención era que, además, preguntase cuantas preguntas queremos que seleccione (de ese tema) y que, al contestar y ejecutar, seleccionase de forma aleatoria del total de preguntas de ese tema, tantas como le hayamos especificado.
Al observar el funcionamiento de la consulta que me enviaste en tu ejemplo, me di cuenta que la columna RAND() lo único que hacía era ordenar, aleatoriamente, las preguntas, pero no seleccionaba un número aleatorio de ellas. Por otra parte, observo que en dicha columna aparece un valor numérico (aleatorio también) que cambia cada vez que se ejecuta la consulta; aprovechando esto, estableciendo un criterio en la misma columna RAND() con un valor cualquiera, observarás (en la otra consulta que he hecho) que combinado con la primera consulta que yo tenía (criterio en IDTema) ya tengo algo aproximado a lo que busco. Al menos para salir del paso por ahora me vale.

Seguiré trabajando en ello porque me gustaría poder especificar el número total de preguntas seleccionadas, por un lado, y añadirle al final el que si no se especifica tema, la selección la haga de todos los temas (creo que esto no es difícil, pero aún no me he puesto con ello).

En fin, agradecido de nuevo y te envío mi ejemple para que observes lo que te comento.

Un abrazo.

Josechu Puerta
Adjuntos
Base Preguntas.odb.zip
(40.77 KiB) 22 veces
OpenOffice 4.1.6/LibreOffice 6.3.4.2 en MacOs 10.14.6
JosechuPuerta
 
Mensajes: 6
Registrado: Lun Ene 13, 2020 6:24 pm

Re: Selección aleatoria de registros

Notapor JosechuPuerta » Mar Ene 21, 2020 2:13 pm

Por cierto, el sistema se ha comido otro mensaje que envié antes, cuando vi tu respuesta RMG y me bajé tu ejemplo. Supongo que habré sido yo mismo sin darme cuenta quien lo haya hecho desaparecer, pero no se como.

En fin, tan solo era para agradecer tu respuesta y tu ejemplo que, como ya te comento me he puesto con él enseguida.

Bueno, lo dicho, gracias.

Josechu Puerta.
OpenOffice 4.1.6/LibreOffice 6.3.4.2 en MacOs 10.14.6
JosechuPuerta
 
Mensajes: 6
Registrado: Lun Ene 13, 2020 6:24 pm

Re: Selección aleatoria de registros

Notapor RMG » Mié Ene 22, 2020 12:05 pm

Hola,

Bajo mi criterio a lo que interpreto como mejor solución, he modificado un poco tu BD.

En tabla preguntas he creado 2 campos nuevos uno para la cantidad de preguntas (NumPreguntas) y otro para las respuestas (Respuestas), tu tienes como dato la respuesta correcta (campo Correcta), pero no la respuesta que se obtiene para comparar con la correcta. Además de estos campo esta el campo calculado con la función RAND, necesario para cambiar las preguntas al hacer un ordenamiento.

Al abrir el formulario PREGUNTAS este no contiene datos hasta que no se lo indicas, si no seleccionas nada o seleccionas un registro vacio que he puesto en Temas la cantidad de preguntas aleatorias sera de todos los temas, si seleccionas un tema todos los registros serán de ese tema seleccionado, hasta que con el botón "Seleccionar cantidad", le indiques la cantidad.
Puedes navegar entre las preguntas con el control tabla para poder responderlas, y a través del botón "Ver respuestas" puedes ver si son correctas, por un nuevo formulario creado RESPUESTAS.

Espero que esta propuesta te sirva.

Saludos
Adjuntos
Base Preguntas_RMG.zip
(47.73 KiB) 25 veces
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Selección aleatoria de registros

Notapor JosechuPuerta » Mié Ene 22, 2020 12:10 pm

Muchas gracias RMG. Voy a ver todo lo que comentas, así leído en tu mensaje, sin ver las tablas y formularios, casi me pierdo.

En fin, me bajo tu trabajo y lo estudio.

Muchas gracias, un abrazo.

Josechu Puerta
OpenOffice 4.1.6/LibreOffice 6.3.4.2 en MacOs 10.14.6
JosechuPuerta
 
Mensajes: 6
Registrado: Lun Ene 13, 2020 6:24 pm

Re: Selección aleatoria de registros

Notapor JosechuPuerta » Mié Ene 22, 2020 12:43 pm

Estimado amigo RMG, al intentar hacer funcionar la BD que me has enviado, me sale un error de Basic. Creo que es la línea 105. De todas formas te envío una captura de pantalla para que veas exactamente lo que te digo.

Un saludo.

Josechu Puerta.
Adjuntos
Captura de pantalla 2020-01-22 a las 12.25.31.zip
(111.99 KiB) 24 veces
OpenOffice 4.1.6/LibreOffice 6.3.4.2 en MacOs 10.14.6
JosechuPuerta
 
Mensajes: 6
Registrado: Lun Ene 13, 2020 6:24 pm

Re: Selección aleatoria de registros

Notapor RMG » Mié Ene 22, 2020 3:41 pm

Hola,

Efectivamente, el error se produce cuando seleccionas el registro sin datos para recoger todas las preguntas. Cambia las últimas lineas de la función por esto.

Código: Seleccionar todo   Expandir vistaContraer vista
If oRes.Next Then
         iTema = oRes.GetInt(1)
        TEMA = iTema
     End If


Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Selección aleatoria de registros

Notapor RMG » Mié Ene 29, 2020 6:04 pm

Hola,

Revisando esto he podido hacer uso de la función LIMIT que limita la cantidad de registros que devuelve, así se evita el campo de apoyo NumPreguntas. Por si te sirve.

Código: Seleccionar todo   Expandir vistaContraer vista
Sub CargaPreguntas(Evento)
Dim oConsulta As Object
Dim sSQL As String
Dim iTema As Integer
Dim iPreguntas As Integer   
   iTema = InputBox("¿Que tema?")
   iPreguntas = InputBox("¿Cuantas preguntas?")
   If iTema = 0 Or IsNull(iTema) Then 'si se cancela o se pone a cero salen todos los temas
      sSQL = "SELECT Preguntas.*, RAND( ) AS Aleatorio FROM Preguntas  ORDER BY Aleatorio ASC LIMIT "& iPreguntas
   Else
      sSQL = "SELECT Preguntas.*, RAND( ) AS Aleatorio FROM Preguntas WHERE ""ID Tema"" = "& iTema &" ORDER BY Aleatorio ASC LIMIT "& iPreguntas
   End If
   oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("NombreConsulta")'esta consulta debe estar creada
   oConsulta.Command = sSQL
End Sub


Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3713
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España


Volver a Base

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron