Ir a un registro concreto de una tabla

Quiero que en un formulario se muestre un registro concreto elegido de forma aleatoria. El registro aleatorio se graba en la variable "numero". La tabla de datos es "Problemas_sr1". Lo hago con este código pero me da error:

DoCmd. GoToRecord acDataTable, "Problemas_sr1", acGoTo, numero

¿Dónde está el problema?

2 Respuestas

Respuesta
1

Asumo que utiliza un botón para ir al registro. Pruebe con esto:

 Dim rs As Object
 Set rs = Me.Recordset.Clone
     rs.FindFirst "[numero] = " & Me.numero
     If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Gracias, antes de nada. Te escribo mismo que le he dicho a otro compañero.

Mi intención es crear un informe que genere problemas de matemáticas de forma aleatoria. Para ello, tengo una tabla llamada "problemas_sr1" con varios campos. Cada campo es una frase del enunciado del problema de matemáticas que se quiere construir.

Esa tabla la voy completando yo con distintos enunciados. Lo que quiero es que, al ejecutar el informe, se busque de forma aleatoria un registro concreto y se construya el problema. Para ello he utilizado el siguiente código

Private Sub Report_Open(Cancel As Integer)
Dim total_reg As Integer
Dim numero As Integer
    total_reg = DCount("*", "Problemas_sr1")
    Randomize
    numero = Int((total_reg * Rnd) + 1)
    DoCmd.GoToRecord , , acGoTo, numero
End Sub

El caso es que, me da un error en "DoCmd...." El caso es que me sale el error 2105. No se puede ir al registro especificado.

No creo que pueda utilizar el GotoRecord en reporte debe clonar el recordset y utilizar algo como;

rs.move numero

Si quiere envíeme su reporte con la tabla origen de datos a [email protected] favor en el asunto anotar la consulta

Me acabo de dar cuenta que lo estoy haciendo mal. Lo que tengo que hacer es crear un filtro para que me muestre en el informe un registro de forma aleatoria. He escrito lo siguiente:

Dim total_reg As Integer
Dim numero As Integer
    total_reg = DCount("*", "Problemas_sr1")
    Randomize
    numero = Int((total_reg * Rnd) + 1)
'    DoCmd.GoToRecord , , acGoTo, numero
    Me.Filter = "Id= '" & numero & "'"
    Me.FilterOn = True

Pero sigue sin funcionar.

Por otro lado, me encuentro con un problema. El campo Id es autonumérico. Si borro un registro concreto y aleatoriamente me sale en la variable "numero" un "id" que estaba borrado, me puede salir un error y ahí me pierdo.

Para mi no lo puede hacer con un reporte, haría lo siguiente:

1. En una tabla temporal adiciono los registros de la consulta, ordenados por el ID, pero este no lo adiciono en su lugar dejo el id de la tabla autonumércio, no obstante, debo reiniciar el id de la tabla cada vez que genere el reporte, sino lo reinicie elimine y vuelva a crear la tabla, supongo que sabe hacerlo. Personalmente reinicio el autonumércio con una función VBA

2. Genero el número aleatorio mediante una función y este valor lo paso a la cláusula Where del reporte, algo como:

DoCmd.OpenReport "mireporte", acViewPreview, , , , "id=" & nombrefuncion()

Con esto ya obtengo el reporte filtrado.

Pueda que existan más soluciones.

Respuesta
1

No dices como determinas la variable Número, ni como es el formulario, así que te pongo un ejemplo. Supongamos que tengo un formulario como

Le he puesto color para que veas como se va al registro determinado. Al pulsar el botón me preguntará a que registro quiero ir( ya te dije que no sé como determinas el número)

Escribo uno y cuando acepto

En este caso el código del botón seria

Private Sub Comando24_Click()
Dim numero As Integer
numero = InputBox("escriba uno", "gracias")
DoCmd.GoToRecord , , acGoTo, numero
End Sub

También podrías hacerlo con

me.recordsource="select * from Problemas_sr1 where....

Por eso sería conveniente que pusieras una imagen del formulario

Antes de nada, muchas gracias por el interés. Quizás no me he explicado bien o he sido muy sintético.

Mi intención es crear un informe que genere problemas de matemáticas de forma aleatoria. Para ello, tengo una tabla llamada "problemas_sr1" con varios campos. Cada campo es una frase del enunciado del problema de matemáticas que se quiere construir.

Esa tabla la voy completando yo con distintos enunciados. Lo que quiero es que, al ejecutar el informe, se busque de forma aleatoria un registro concreto y se construya el problema. Para ello he utilizado el siguiente código

Private Sub Report_Open(Cancel As Integer)
Dim total_reg As Integer
Dim numero As Integer
    total_reg = DCount("*", "Problemas_sr1")
    Randomize
    numero = Int((total_reg * Rnd) + 1)
    DoCmd.GoToRecord , , acGoTo, numero
End Sub

El caso es que, me da un error en "DoCmd...." El caso es que me sale el error 2105. No se puede ir al registro especificado.

Me acabo de dar cuenta que lo estoy haciendo mal. Lo que tengo que hacer es crear un filtro para que me muestre en el informe un registro de forma aleatoria. He escrito lo siguiente:

Dim total_reg As Integer
Dim numero As Integer
    total_reg = DCount("*", "Problemas_sr1")
    Randomize
    numero = Int((total_reg * Rnd) + 1)
'    DoCmd.GoToRecord , , acGoTo, numero
    Me.Filter = "Id= '" & numero & "'"
    Me.FilterOn = True

Pero sigue sin funcionar.

Por otro lado, me encuentro con un problema. El campo Id es autonumérico. Si borro un registro concreto y aleatoriamente me sale en la variable "numero" un "id" que estaba borrado, me puede salir un error y ahí me pierdo.

Para otro problema que tenía, tu solución me vale. Muchas gracias.

No sé como es tu formulario. Yo tengo un ejemplo de algo parecido que le hice a otro que preguntó. Generar preguntas al azar. Si tengo un formulario Donde elijo primero el tema y pulso el botón

Si lo vuelvo a pulsar

Y así hasta...

El código del botón es

Private Sub Comando15_Click()
Dim numRegs As Long
numRegs = Me.Recordset.RecordCount
Randomize
DoCmd.GoToRecord , , acGoTo, Int(numRegs * Rnd + 1)
End Sub

Con lo que el formulario del alumno, que sería con el que de verdad trabajaras, te quedaría

Su uieres, repito, si quieres mándame un mensaje, sólo el mensaje, a [email protected] y te mando el ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Pedro Muñoz, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas