Visualización de registro activo en formulario continuo

Tengo un formulario continuo que se rellena de datos en función de la fecha que tenga un campo. Solo se seleccionan los registros que tengan una fecha de hace más de seis meses.

En determinados registros de los que se seleccionan, voy grabando la fecha de hoy y después hago un requery para que se actualicen los registros a mostrar, con lo que el registro modificado desaparece de la selección.

Mi "problema" es que, si compruebo pero no modifico más registros de los que caben en la ventana, el siguiente registro que tendría que revisar queda fuera de la misma y no se ve hasta que muevo la barra de desplazamiento vertical. En la función hago esto:

   numreg = CurrentRecord

   Form_SUB_BUSCA_ESCUDOS.Requery
   DoCmd. GoToRecord,, acGoTo, numreg

Mi pregunta es : ¿Hay alguna forma de situar el registro activo como el primero de los que se muestran en la ventana?

2 respuestas

Respuesta
1

Puedes usar el BookMark de un RecordClone para volver a situarte en el registro adecuado.

No se si estás familiarizado con el VBA

El código a ejecutar sería algo así:

Dim Datos As Recordset

Set Datos = Me.RecordsetClone 'Haces una copia de los datos cargados en el formulario

Datos.Bookmark = Me.Bookmark  'En la copia, te situas en el registro activo del formulario

Datos. MoveNext 'Te mueves al siguiente registro de la copia

Me. Requery 'Actualizas los datos del formulario

Me.Bookmark = Datos.Bookmark 'En el formulario, te situas en el registro activo de la copia, que era el siguiente al que habías actualizado

¡Gracias! 

De todas formas quiero asegurar que funcione porque es posible que al hacer el Requery Access asigne nuevos bookmarks a los registros.

Hago una prueba y te digo algo

Efectivamente fallaba.

Este sí funciona:

Dim NumReg as Long 'Esta variable debe declararse en la cabecera del módulo del formulario. En ella me guardo el número de registro en el que vas a colocarte después de actualizar el anterior

Este sería el código a ejecutar cuando se produzca el evento "después de actualizar" del campo que modificas.

Private Sub Campo_AfterUpdate

Dim Datos As Recordset

Set Datos = Me.RecordsetClone

Datos.Bookmark = Me.Bookmark

Datos.MoveNext

If Not Datos.EOF Then NumReg = Datos!IdExpediente Else NumReg = 0

Me.Requery

Set Datos = Me.RecordsetClone

If NumReg <> 0 Then Datos.FindFirst "IdExpediente=" & NumReg : Me.Bookmark = Datos.Bookmark 

Ens Sub

Aquí he llamado IdExpediente al campo principal de la tabla, pero lógicamente deberás cambiarlo por el nombre del de tu tabla.

Respuesta
1

Voy a intentar explicarte como funcionan los formularios. En los formularios únicos sólo ves un registro, los demás no existen hasta que te desplazas a uno de ellos. En los formularios continuos, aunque veas varios registros sólo tiene existencia física uno, el registro activo(señalado con una punta de flecha)

Ana Trujillo y los demás no existen, son imágenes virtuales, que sólo tendrán existencia cuando se conviertan en el registro activo

Aquí Ana si existe, pero los demás no. Poniendo un ejemplo grosero, si haces una compra de un mueble por catálogo, tu estás viendo imágenes virtuales de como son. El mueble sólo tendrá existencia física cuando te llegue a casa(registro activo). Por eso Access no puede saber, adonde quieres ir, o si quieres desplazarte a algún registro determinado. De forma que si modificas uno y haces un requery para que desaparezca, por defecto, te convierte en activo el siguiente.

Por eso, quizá te resulte más cómodo limitar el número de registros que te vaya a mostrar diciéndole, por ejemplo, que sólo muestre 15 registros por pantalla, diciéndole que, aparte de la fecha, cumpla otra(s) condicion(es), etc

Por ejemplo, poniendo después de me. Requery

me.recordsource="select nombrecliente, fecha venta from clientes where fechaventa=dfirst(""fechaventa"",""clientes"",""fechaventa=...."")"

Es decir, que te ponga como primer registro aquel en que fecha venta sea...

Muchas gracias Icue.

Entiendo lo que me cuentas, por eso mi pregunta es ¿Como hacer para que el siguiente registro a mostrar se muestre, por ejemplo, como si fuera el primero de los seleccionados?

Un saludo

Vamos a ver si me explico. Es que no necesitas nada de eso. Cierto que no sé como eliminas los registros, pero si tengo un formulario

Voy a eliminar el registro activo. Pulso el botón y

Le he puesto que lo marque en amarillo porque hay veces que el cursor no sale al imprimir la pantalla, pero puedes ver que el cursor se ha ido directamente al siguiente y convirtiéndolo en el registro activo.

En el botón, en el evento al hacer clic tengo puesto simplemente

Private Sub Comando9_Click()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas