** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - activar registro desde formulario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoactivar registro desde formulario

 Responder Responder
Autor
Mensaje
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Tema: activar registro desde formulario
    Enviado: 22/Noviembre/2020 a las 07:40
A ver si me podéis ayudar con esta, 
tengo un formulario cultivos con 2 campos idcultivo y cultivo este formulario tiene botones para agregar y modificar registros, en este formulario tengo un subformulario con todos los cultivos, mi pregunta ¿como puedo seleccionar un registro en el subformulario y me cambie el que tengo activo en el formulario?, por ejemplo para modificarlo.

gracias.
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 22/Noviembre/2020 a las 23:13
Si no quieres complicarte mucho, usando un formulario dividido eso es automático

No lo he probado, pero otra opción es colocar en el evento "Al activar registro" del subformulario algo como
Me.Parent.Bookmark = Me.Bookmark

Si eso no funciona, (ya que creo que los Bookmark debían crearse en base al mismo recodset en el que uno se quiere desplazar)

En ese caso deberás crear un Recordsetclone del formulario principal, buscar el registro que tengas en el subformulario y luego igualar el Bookmark del formulario principal con el del recordset


El saber no ocupa lugar, sólo tiempo
Arriba
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 14:36

he probado con esto pero no funciona, donde puede estar el error.


Private Sub Form_Current()
    Dim rs As Object

    Set rs = Forms![forcultivos].Recordset.Clone, 
    rs.FindFirst "[idcultivo] = '" & Me.idcultivo & "'"
    Me.Bookmark = rs.Bookmark
End Sub

gracias
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 17:47
En que te has dejado el Parent
Xavi, un minyó de Terrassa

Mi web
Arriba
Parche Ver desplegable
Habitual
Habitual


Unido: 03/Julio/2018
Localización: Alicante
Estado: Sin conexión
Puntos: 170
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 17:49
Buenas tardes:

A vote pronto:

- Parent - quitar coma final en la primera línea y frmCultivos supongo que será.

Saludos.
Arriba
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 20:30
Con esto me funciona, como lo veis.

Private Sub Form_Current()
 
    Dim rs As Recordset
    Set rs = Forms!forcultivos.RecordsetClone
    rs.FindFirst "[idcultivo] = '" & Me.idcultivo & "'"
    Forms!forcultivos.Bookmark = rs.Bookmark
End Sub

Gracias.
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 20:37
Yo veo varias cosas.
1. Probaste simplemente aquello de Me.Parent.Bookmark = Me.Bookmark  ? No te funciono?

Sobre tu código:
1. No sé si .Recordset.Clone es lo mismo que .RecodSetClone, prueba a cambiarlo por si acaso Embarrassed

2. Si usas .FindFirst , yo usaría también .NoMatch, no sea que la búsqueda no comience desde el principio del recordset, o en su defecto, antes del .FindFirst, pondría un rs.MoveFirst

2. Si [IdCultivo] es un campo autonumérico (o numérico) te sobrarían los apostrofes
      rs.FindFirst "[idcultivo] = " & Me.idcultivo

  (Si es un campo de texto está bien )Wink

3. Como dice xavi, te comiste el Parent:
     Me.Parent.Bookmark = rs.Bookmark

prueba y nos cuentas

El saber no ocupa lugar, sólo tiempo
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 20:40
Publicado originalmente por simpatico3333 simpatico3333 escribió:

'"
    Forms!forcultivos.Bookmark = rs.Bookmark

Funciona porque accedes al Bookmark del formulario principal directamente sin usar la propiedad .Parent del subformulario
En realidad es lo mismo, pero de modo más directo ;) 


Editado por Dabellaso - 23/Noviembre/2020 a las 20:40
El saber no ocupa lugar, sólo tiempo
Arriba
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Enviado: 23/Noviembre/2020 a las 21:48
1. probado Me.Parent.Bookmark = Me.Bookmark funciona también.
2. .NoMatchn y rs.MoveFirst no me funciona
3. idcultivo es texto

el problema viene ahora tengo un cuadro búsqueda en el formulario principal que filtra los datos del subformulario con el siguiente código;

Private Sub txtbuscar_Change()
Dim sql As String
sql = "select * from cultivos where cultivo like'*" & Me.txtbuscar.Text & "*'order by cultivo"
Me.forsubcultivos2.Form.RecordSource = sql
End Sub

crea conflicto, el cuadro búsqueda no funciona correctamente.
el formulario principal es forcultivos y el subformulario forsubcultivos2.

Cry Cry Cry
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 24/Noviembre/2020 a las 20:04
Realmente no estas filtrando el subformulario, le estas cambiando el origen de datos por otro 
Despues de hacer eso, no creo que te sigua funcionando aquello de Forms!forcultivos.Bookmark = rs.Bookmark

cuando dices que el cuadro de búsqueda crea conflicto, que no funciona, a que te refieres? No filtra, filtra mal, da error...? o después de haber "filtrado", en el formulario principal no se muestra el registro de subformulario?

ayúdame a ayudarte Wink

El saber no ocupa lugar, sólo tiempo
Arriba
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Enviado: 26/Noviembre/2020 a las 19:51
Ante todo perdonar por mi ignorancia en el tema de base de datos, a lo mejor me meto en cosa mas complicada de las que debo.

Dicho esto, el seleccionar registro sí me funciona incluso con los datos filtrados, lo que no va bien es el cuadro de búsqueda que hay veces que me deja escribir varios caracteres y otra veces solo uno, pero filtrar sí filtra.

muchas gracias
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 26/Noviembre/2020 a las 20:11
No te disculpes por no saber algo, para aprender hay que preguntar Wink 

Puedes poner el cogido que tienes para cuando filtras?
Filtras tras cada letra puesta en el textbox? o esperas a escribir todo y luego pulsas intro o un botón?

Se me ocurre que quizás, después de cada letra a buscar, el formulario se actualiza y se borra el contenido que había en el textbox., Pero vendría bien tener más información

No lo he comprobado, quizás al desplazarte a otro registro con aquello del bookmark se actualice el formu y pierdas lo escrito, Funcionaba bien antes de sincronizar el formulario principal con el subformulario?


Editado por Dabellaso - 26/Noviembre/2020 a las 20:13
El saber no ocupa lugar, sólo tiempo
Arriba
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Enviado: 26/Noviembre/2020 a las 20:43
Efectivamente llevas razón he probado el código este;

Private Sub txtbuscar_Click()
Dim sql As String
sql = "select * from cultivos where cultivo like'*" & Me.txtbuscar.Text & "*'order by cultivo"
Me.forsubcultivos.Form.RecordSource = sql
End Sub

que es el mismo pero en vez de al cambiar en el cuadro texto, que me va buscando según voy escribiendo, por hacer click en el cuadro texto después de escribir la palabra que quiero buscar, aunque lo suyo seria de ir buscando según voy escribiendo, pero si hay mas remedio me tendré que adaptar.

otra cosa que estoy probando es este código de un modulo que tengo pero me dice que no encuentra el formulario forsubcultivos2.

Private Sub txtbuscar_Change()
Forms!forsubcultivos2![cultivo].RowSource = "Select IDCultivo, cultivo From concultivos Where cultivo Like '*" & sintildes.Buscaacent(txtbuscar.Text) & "*' ORDER BY cultivo;"
End Sub


gracias.
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 26/Noviembre/2020 a las 21:17
El problema lo tendrás siempre que el formulario principal se actualice, de igual el modo de hacerlo.

Usa cosa es filtrar un subformulario, y otra es filtrar un subformulario, y el propio formulario desde donde escribes la búsqueda.

Se te va a complicar una barbaridad, pero puedes inventar un modo para:

1.- Escribir la primera letra y guardarla en una variable publica, o una Static 
2.- Justo después de que el formulario principal se actualice, recuperar el texto que tenias y volver a colocarlo en el TextBox de búsqueda
3.-Situar el cursor en la ultima posición del TextBox 
4.- ahora estarás listo para filtrar con una nueva letra manteniendo la anterior

5.- Cuando la búsqueda termine (Habitualmente al salir del TextBox , borrar el contenido de la variable para que la siguiente búsqueda no use el texto almacenado de la búsqueda anterior


Por otro lado .RowSource es propio de combobox y controles de listBox, no es válido para formularios. si logras encontrar el formulario que accces te dice no encontrar, te generará otro error.

Es mas fácil usar el intellisense.
Forms.("TuFormulario).LaPropiedad = El valor
Forms.("TuFormulario).Controls("TuControl").LaPropiedad = El valor
Forms.("TuFormulario).Controls("TuCONTROLSUBFORMULARIO").FORM.LaPropiedadDELSUBFORMULARIO = El valor



Editado por Dabellaso - 26/Noviembre/2020 a las 21:26
El saber no ocupa lugar, sólo tiempo
Arriba
simpatico3333 Ver desplegable
Habitual
Habitual


Unido: 26/Abril/2008
Localización: españa
Estado: Sin conexión
Puntos: 120
Enlace directo a este mensaje Enviado: 29/Noviembre/2020 a las 13:57
No lo consigo lo dejo por imposible, cierro el tema.

Muchas gracias.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable