** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Problemas con subformulario y consulta de list_box
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Problemas con subformulario y consulta de list_box

 Responder Responder
Autor
Mensaje
waxpoo Ver desplegable
Nuevo
Nuevo


Unido: 07/Marzo/2018
Localización: Burgos
Estado: Sin conexión
Puntos: 14
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita waxpoo Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Problemas con subformulario y consulta de list_box
    Enviado: 03/Diciembre/2018 a las 11:03
Buenos días!!!
Lo primero, gracias aunque solo sea por leerme para tratar de ayudar.

Les pongo en situación:

Tengo un formulario con un subformulario en su interior. (emula un sistema de facturación, con lo cual el subformulario muestra las líneas de factura)

En el formulario principal tb he insertado un list_box.

Mi intención es que en dicho list_box se cargue cierta información en función del artículo que haya ingresado en la línea de facturación. Para ello, en Lin_articulo_enter hago lo siguiente:

sql = "Select ..... where tabla.articulo = " & me!Lin_articulo
Set rst = dbs.OpenRecordset(sql, dbOpenSnapshot)

If rst.RecordCount <> 0 Then
  Me.Parent!LST_info.RowSource = sql
End If


Es sencillo, en base al valor del campo LIN_articulo, el list_box se cargará con una información u otra.

El problema me viene que cada vez que salta el evento "Lin_articulo_enter" me situa el cursor en la primera línea del subformulario.

Había pensado almacenar la última posición del cursor y fijar el cursor a esa posición, pero me parece una chapuza y ni siquiera estoy seguro de que funcionara.

Insisto, gracias!!!!!

Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 737
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Diciembre/2018 a las 18:38
¿No tendrás algo más de código que se ejecute, ya sea en el subformulario, en el list box, o en ese lin_articulo?

Si no, también puedes usar la propiedad AbsolutePosition del Recordset del subformulario para saber en qué registro estás:

- https://docs.microsoft.com/es-es/office/client-developer/access/desktop-database-reference/recordset-absoluteposition-property-dao
Arriba
waxpoo Ver desplegable
Nuevo
Nuevo


Unido: 07/Marzo/2018
Localización: Burgos
Estado: Sin conexión
Puntos: 14
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita waxpoo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Diciembre/2018 a las 08:22
Bueno, gracias por la respuesta. Te muestro todo el código:

Public Sub precios_anteriores(cliente As Integer, articulo As Integer)
    Dim sql As String
    Dim dbs As dao.Database
    Dim rst As dao.Recordset
    
    'Vaciamos el list_box
    [Forms]![F_documentos].LST_precios.RowSource = ""
    
    If Not (cliente = 0 Or articulo = 0) Then
        'Obtenemos la conexión.
        Set dbs = CurrentDb
        'Definimos la consulta que desamos
        sql = "SELECT T_Documentos.DOC_fecha, T_LINEAS.LIN_precio, T_LINEAS.LIN_calibre, " & _
               "T_PROVEEDORES.PRO_Apodo, T_Documentos.DOC_cliente, T_LINEAS.LIN_articulo " & _
               "FROM T_PROVEEDORES INNER JOIN (T_Documentos INNER JOIN T_LINEAS ON " & _
               "T_Documentos.DOC_id = T_LINEAS.LIN_documento) ON T_PROVEEDORES.PRO_ID " & _
               "= T_LINEAS.LIN_proveedor " & _
               "WHERE (((T_Documentos.DOC_cliente) = " & cliente & ") And" & _
               "((T_LINEAS.LIN_articulo) = " & articulo & "))" & _
               "ORDER BY T_Documentos.DOC_fecha DESC;"
        Set rst = dbs.OpenRecordset(sql, dbOpenSnapshot)
        'Rellenamos la list_box
        If rst.RecordCount <> 0 Then
               [Forms]![F_documentos].LST_precios.RowSource = sql
        End If
    End If
    'Me.Parent!LST_precios.Requery
End sub

Este es el código de mi función.
El problema me viene cuando asigno el origen a el list_box. Digamos que yo creo que access accede a este objeto para asignarle el valor que yo le asigno y al "volver" se sitúa en el subformulario en el primer registro.

Alguna idea para asignar el .RowSource del list_box??????????????

Gracias.

Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 737
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Diciembre/2018 a las 19:31
He hecho una pequeña prueba con un DCount, lista en formulario principal y código en subformulario. No me ha enviado el cursor al primer registro del subformulario:

Private Sub finAlquiler_AfterUpdate()
    Dim strFiltro As String
   
    strFiltro = "Format([tblAlquileres].[finAlquiler],""yyyymm"")=""" & Format(Me.finAlquiler, "yyyymm") & """"
   
    If Nz(DCount("*", "tblAlquileres", strFiltro), 0) > 0 Then
        Me.Parent.lista9.RowSource = "SELECT [tblAlquileres].[idCasa], [tblAlquileres].[iniAlquiler], [tblAlquileres].[finAlquiler] FROM [tblAlquileres]" & _
            "WHERE " & strFiltro
    Else
        Me.Parent.lista9.RowSource = ""
    End If
End Sub
Arriba
waxpoo Ver desplegable
Nuevo
Nuevo


Unido: 07/Marzo/2018
Localización: Burgos
Estado: Sin conexión
Puntos: 14
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita waxpoo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Diciembre/2018 a las 10:49
He "reproducido" tu ejemplo y efectivamente funciona como a yo desearía... así que tengo que localiza qué he hecho mal....

Gracias por tu tiempo.

Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 737
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Diciembre/2018 a las 18:45
Revisa código en la lista, eventos que se puedan producir al cambiar el origen de la lista, …

También puedes colocar puntos de interrupción y ver la pila de llamadas para ver qué está ocurriendo.
Arriba
waxpoo Ver desplegable
Nuevo
Nuevo


Unido: 07/Marzo/2018
Localización: Burgos
Estado: Sin conexión
Puntos: 14
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita waxpoo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 07/Diciembre/2018 a las 10:16
Estas son las cosas que se me escapan....

Realicé tu ejemplo tal cual y efectivamente access responde como yo deseo....

Acudo a mi caso.... y no.

He puesto puntos de parada, he ejecutado paso a paso, he revisado los eventos de la lista (no tiene ni eventos ni código asociado) y nada, cuando ejecuto el rowsource (bien sea para asignarle datos, o para vaciarlo me sitúa el foco en la primera línea del subformulario. E insisto, lo he ejecutado paso a paso, comparado las propiedades de la lista una a una y nada....


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable