** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Listado de los registros de un subformulario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Listado de los registros de un subformulario

 Responder Responder
Autor
Mensaje
Martí Parellada Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 15/Octubre/2025
Localización: St. Esteve Ses.
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Martí Parellada Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Listado de los registros de un subformulario
    Enviado: 15/Octubre/2025 a las 02:59
Intento hacer un listado de todos los registros de un subformulario, y el listado lo hace solamente con el contenido del registro que tengo seleccionado (o el primero de ellos si no selecciono nada en el subformulario), el numero de veces contenidos en el subformulario.
Detallo (de forma abreviada) el procedimiento que utilizo (módulo de Access):

Function CrearFactura(Cantidad As Single, Ref, Concepto As String, Precio As Single) As String
Dim rs As DAO.Recordset
    Set rs = Forms![FACTURACION]![DETALLE_FACTURA].Form.RecordsetClone
    Dim Registros As Single
    Dim i As Single
    Open CurrentProject.Path & "\FACTURA.txt" For Output As #1
    Registros = CStr(rs.RecordCount)
    For i = 1 To Registros
Print #1, ; Cantidad & " - " & Ref & " - " & Concepto & " - " & Precio
    Next i
    rs.Close
    Set rs = Nothing
    Close #1
End Function

El resultado para una factura con 3 registros de detalle sale de esta forma:
20 - 0810 - Carteles a color tamaño A3 - 0,8
20 - 0810 - Carteles a color tamaño A3 - 0,8
20 - 0810 - Carteles a color tamaño A3 - 0,8
Solamente ha hecho el listado del primer concepto de la factura, repetido 3 veces (número de detalles de la factura).

No logro que para cada iteración del For-Next ponga el "foco" en cada registro del subformulario.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 15/Octubre/2025 a las 07:53
Hola Martí y bienvenido al foro,

Varias cosas

- No entiendo los argumentos de la función cuando se supone que vas a guardar los de los registros del subformulario
- Para hacer un RecordCount es conveniente posicionarse en el último registro (luego habrá que volver al primero)
- Un bucle For..Next no seria lo mas adecuado. Utiliza un bucle Do...Loop

Algo así:

Function CrearFactura()
Dim rs As DAO.Recordset
Set rs = Forms![FACTURACION]![DETALLE_FACTURA].Form.RecordsetClone
rs.MoveFirst
Open CurrentProject.Path & "\FACTURA.txt" For Output As #1
Do Until rs.EOF
Print #1, ; rs!Cantidad & " - " & rs!Ref & " - " & rs!Concepto & " - " & rs!Precio
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Close #1
End Function

Escrito al vuelo. Se asume que Cantidad, Ref, Concepto y Precio son campos del recordset

Un saludo

Editado para añadir un MoveFirst (sugerencia de Mihura)


Editado por xavi - 15/Octubre/2025 a las 10:54
Xavi, un minyó de Terrassa

Mi web
Arriba
Martí Parellada Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 15/Octubre/2025
Localización: St. Esteve Ses.
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Martí Parellada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Octubre/2025 a las 16:00
Ya lo había probado de esta forma, y no funciona.

Si DETALLE_FACTURA tiene, por ejemplo 3 registros, me lista el contenido del primer registro 3 veces.
No logro que ponga el foco en cada uno de los registros.

Si en DETALLE_FACTURA selecciono el segundo registro, me lista el contenido de este segundo registro 3 veces.
Arriba
Martí Parellada Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 15/Octubre/2025
Localización: St. Esteve Ses.
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Martí Parellada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Octubre/2025 a las 16:04
Por cierto, utilizo el Access de Microsoft Office Professional 2010
No sé si al ser una versión tan antigua puede ser el problema.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Octubre/2025 a las 16:16
Discrepo. ¿Lo has probado? Porque es un código bastante estandar de recorrer los registros de un subformulario que funciona perfectemente.

Traduzco las líneas del código.

Function CrearFactura() Nombre de la función. Se puede llamar desde cualquier parte.
Dim rs As DAO.Recordset Declaración de la variable rs como un recordset tipo DAO
Set rs = Forms![FACTURACION]![DETALLE_FACTURA].Form.RecordsetClone  ' Asignar al recordset un clonado de los registros del subformulario DETALLE_FACTURA del formulario FACTURACION
rs.MoveFirst Colocarse en el primer registro del recordset (ergo del subformulario)
Open CurrentProject.Path & "\FACTURA.txt" For Output As #1 Abrir un fichero txt para exportación de datos
Do Until rs.EOF ' Abrir un bucle hasta que se acaben los registros
Print #1, ; rs!Cantidad & " - " & rs!Ref & " - " & rs!Concepto & " - " & rs!Precio ' Escribir en el fichero de texto el contenido de los campos del recordset
rs.MoveNext ' Moverse al siguiente registro del recordset
Loop ' Loop del bucle
rs.Close ' Cerrar el recorset
Set rs = Nothing ' Limpiar
Close #1 ' Cerrar el fichero de texto
End Function  ' Fin de función

Y la versión de Office no tiene nada que ver. Esto funciona desde hace un montón de años.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Martí Parellada Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 15/Octubre/2025
Localización: St. Esteve Ses.
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Martí Parellada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Octubre/2025 a las 17:22
Pues NO funciona. Sigo investigando y te digo cuando lo consiga.

Pensé que a lo mejor el problema venia por la forma que yo relaciono formulario/subformulario, e intenté hacerlo abriendo únicamente el subformulario. Pero el problema era el mismo: no hay forma que enfoque cada linea de registro.
Puede pasar por todos los registros, pero sin que reciban el enfoque para poder sacar los datos.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Octubre/2025 a las 17:33
Me parece que hay algo que no ha quedado claro.

Los registros del subformulario *jamás* se van a enfocar. Se va a abrir un recordset basado en el origen del registro del subformulario y se va a recorrer. En cada MoveNext deben cambiar los datos (que son los que utiliza el Print)

¿Has probado a ejecutar paso a paso para ver los valores que va tomando?
Xavi, un minyó de Terrassa

Mi web
Arriba
Martí Parellada Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 15/Octubre/2025
Localización: St. Esteve Ses.
Estado: Sin conexión
Puntos: 9
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Martí Parellada Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Octubre/2025 a las 00:01
Ya he solucionado el problema recurriendo a ejecutar una macro de Access que va leyendo registro a registro los datos del subformulario.

Moltes gràcies per l'ajuda. Visca els Minyons de Terrassa.


Editado por Martí Parellada - 18/Octubre/2025 a las 02:47
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable