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

Tema cerradoRellenar campo de un subformulario

 Responder Responder
Autor
Mensaje
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Tema: Rellenar campo de un subformulario
    Enviado: 25/Enero/2021 a las 09:39
Buenos días a tod@s
Quisiera rellenar un campo en todos los registros que se encuentran en un subformulario cuando se de una condición deerminada.
El subformulario es "SubAux" y el campo a rellenar es "SalidaAux"
La condición es que el campo "SalidaAux" esté vacío y cuando no lo esté, que adquiera el valor del campo "FechaSalida" que está en el formulario principal que es desde donde hacemos la llamada.

Private Sub Comando452_Click()
Dim i As Integer
For i = 1 To Me!SubAux.Form![Reg]
If (IsNull(Me!SubAux.Form![SalidaAux])) Then
Me!SubAux.Form![SalidaAux] = Me.FechaSalida
End If
Next i
End Sub

Con este código rellena el campo "SalidaAux" pero solo lo hace en el que había dejado el foco antes de pulsar el botón y lo que quiero es que lo haga en todos los registros donde se de la condición expuesta. 
Evidentemente este no es el camino,creo que esto se debería hacer con un RecordSet pero, además de no estar seguro, no lo sabría aplicar.
Solicito ayuda
Gracias
Juan
jj
Arriba
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 11:06
Hola de nuevo
Sigo intentando arreglar esto e inspirándome en  un hilo reciente de Xavi (recorrer controles en un formulario) He puesto esto:

Private Sub Comando459_Click()
Me!SubAux.SetFocus
For Each ctl In Me!SubAux.Form![SalidaAux]
  If (IsNull(Me!SubAux.Form![SalidaAux])) Then
Me!SubAux.Form![SalidaAux] = Me.FechaSalida

End If
  Next
End Sub

Pero me sale error 438 "el objeto no admite esta propieda o método"
Y se colorea aquí:
For Each ctl In Me!SubAux.Form![SalidaAux]
jj
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 11:10
Hola!

No me queda claro que es lo que quieres hacer.
Lo que entiendo de tu mensaje es que quieres rellenar el campo "Me!SubAux.Form![SalidaAux]" por el valor de "Me.FechaSalida", pero la duda es si el campo "Me.FechaSalida" tiene varios valores o único?

Editado por mounir - 25/Enero/2021 a las 11:10
Un Saludo.
Arriba
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 11:26
Hola mounir; gracias una vez más.
El campo "Me!SubAux.Form![SalidaAux]" puede estar con o sin valor.
Si está con valor; dejarlo como está
Si está en blanco (sin valor); poner el valor "FechaSalida" que está en el formulario Ppal
Pero esto en todos los registros del subformulario "SubAux"
Saludos


jj
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 11:32
Hola!

Supongo que la "FechaSalida" va cambiando según el registro, es así?, en caso afirmativo, habría que crear dos "recordset", uno para seleccionar los nulos del "Me!SubAux.Form![SalidaAux]" y el otro RecordSet para las "FechaSalida".

Editado por mounir - 25/Enero/2021 a las 11:33
Un Saludo.
Arriba
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 11:58
Hola
Afirmativo, cada registro del Formulario Ppal (un único formulario) tiene una "FechaSalida" que pueden ser iguales o no.
Ahora para pruebas hago la operación desde un botón pero en realidad lo haré desde el propio campo "FechaSalida" en el evento "Después de Actualizar" es decir; cuando cumplimente el valor de "FechaSalida", "después de actualizar" se recorrerán todos los registros del subformulario "SubAux" rellenando el campo "SalidaAux" con la condición señalada.
Los registros que hay que recorrer son los del subformulario, por tanto, a mi me parece (con toda humildad) que no es necesario el RecordSet en el formulario Ppal.

jj
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 12:06
Hola!

Todavía no sé si quieres rellenar todos los nulos del "Me!SubAux.Form![SalidaAux]" por la fecha que hay en "FechaSalida". Si es así, entonces con un RecorSet que recorra el subformulario.
Un Saludo.
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 14:57
Mira mi ejemplo de recorrrer subformulario hay varias formas:
http://emilioverastegui.blogspot.com/2015/02/recorrer-subformulario.html

Saludos.
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 15:46
Hola.
Dando otro enfoque, también cabe la posibilidad ( se puede montar el "SQL" con el asistente para consultas con el formulario abierto) de hacer un "Update" de la tabla en cuestión, eso si con el where adecuado.
Espero que ayude a resolver la duda
Un saludo a todos
Arriba
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 16:12
Hola mounir,Emilove y prga
Muchas gracias por ayudarme.
mounir, afirmativo, si quiero rellenar todos los nulos del "Me!SubAux.Form![SalidaAux]" por la fecha que hay en "FechaSalida".
Por favor, indícame el recordset o algo que me pueda orientar en ese camino, pues no estoy ducho, ni mucho menos, en esto.
Emilove; he abierto tu página y le dedicaré mi tiempo pero, por ahora, voy a tirar por lo del recordset.
prga; lo mismo que lo dicho para Emilove, indagaré con la SQL
Gracias a los tres y a cuantos os habéis interesado por resolver este asunto.
Juan
Juan
jj
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 16:59
Hola!

La duda que tenía era si querías actualizar todos los nulos del subformulario de todos los registros del formulario, me explico, supongamos que tenemos 10 registros en el formulario con sus fechas de salida, y cada registro del formulario tiene 5 registros en el subformulario (3 registros nulos, como ejemplo). Claro está, si lo haces con un "recordset" que recorra el subformulario solo es aplicable para los nuevos registros de "Fecha_salida" pero los registros antiguos se quedan sin rellenar, por eso lo del doble "RecordSet".

Es un magnífico ejemplo lo de Emiliove.
Un Saludo.
Arriba
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 18:36
Hola
Intento con el primer ejemplo de Emilove adaptado a mi caso

Private Sub Ctl1Recordsetclone_Click()
Me.SubAux.Visible = True
With Me.SubAux.Form.RecordsetClone
.MoveFirst
Do Until .EOF
    .Edit
If (IsNull(Me!SubAux.Form![SalidaAux])) Then
Me!SubAux.Form![SalidaAux] = Me.FechaSalida
    End If
    .Update
    .MoveNext
    Loop
End With
End Sub

Solo me rellena el campo donde he puesto el foco previamente, es decir, me situó en un campo nulo del subformulario, a continuación hago click en el botón y se rellena el campo seleccionado pero ninguno más
jj
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Enviado: 25/Enero/2021 a las 20:27
Yo diría que debe funcionar así:

Me.SubAux.Visible = True

With Me.SubAux.Form.RecordsetClone

.MoveFirst

Do Until .EOF

    .Edit

If IsNull(!SalidaAux) Then

!SalidaAux = Me.FechaSalida

    End If

    .Update

    .MoveNext

    Loop

End With

End Sub


Pero si pones un punto de interrupción y te vas paso a paso puedes ver que hace y donde esta el error.


Saludos.




Editado por emiliove - 25/Enero/2021 a las 21:48
Arriba
Juan Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 26/Mayo/2006
Localización: España
Estado: Sin conexión
Puntos: 1035
Enlace directo a este mensaje Enviado: 26/Enero/2021 a las 08:03
Buenos días a todos!
Pues llevaba horas intentando solucionar esto y nada, aunque es tiempo bien empleado pues siempre se aprende. Emilove, he reproducido y he hecho pruebas con todos tus ejemplos en una BD añadiendo los campos de fecha correspondientes tanto en el Form como en el Sub para hacer pruebas con mi caso concreto que, respecto al de tus ejemplos, difiere en el condicional. Si no  fallaba una cosa  fallaba otra, hasta que he abierto el Foro para pedir ayuda de nuevo y veo tu mensaje. Lo he probado y ha funcionado a la primera.
Muchísimas gracias a todos
Juan
Por mi parte podéis quitar el hilo

jj
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable