Filtrar registros de un formulario
Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84844
Fecha de impresión: 27/Marzo/2026 a las 02:20
Tema: Filtrar registros de un formulario
Publicado por: maserrano
Asunto: Filtrar registros de un formulario
Fecha de publicación: 21/Noviembre/2019 a las 17:50
|
Buenas tardes. Me gustaría saber si desde un formulario de inicio, donde se loga un usuario se pueden filtrar los registros a los que tiene acceso. La idea es que una vez que se ingrese por un cuadro de lista a una provincia (de una comunidad), me filtre los usuarios de esa provincia (por otro cuadro de lista) y entre. Hasta ahí sé hacerlo. Al entrar, lo hará en un registro con datos de todas las provincias. Lo que quiero es que ese usuario acceda sólo a los registros de datos de su provincia y no de todas las del registro. Me pueden ayudar, porque "esto" no tengo ni idea a priori de cómo hacerlo. Gracias por adelantado.
|
Respuestas:
Publicado por: mounir
Fecha de publicación: 21/Noviembre/2019 a las 19:53
Hola!
En la página del maestro Neckkito hay muchos ejemplos de seguridad http://neckkito.xyz/nck/index.php/ejemplos/37-seguridad" rel="nofollow - Seguridad . Lo del cuadro de lista busca en el foro, en la página de Neckkito o en Google Combos en cascada.
------------- Un Saludo.
|
Publicado por: maserrano
Fecha de publicación: 21/Noviembre/2019 a las 20:22
|
Gracias Mounir. Lo de la seguridad lo tengo claro y en relación a los combos, más o menos. Lo que ocurre es que no sé extrapolar el resultado de un combo filtrado a otro formulario. Me explico. Elijo en un combo país; en el siguiente combo elijo provincias (de ese país) y, p.e. en el tercer combo elijo poblaciones (de esa provincia y de ese país). Pues bien, quiero acceder a los registros (en otro formulario, de otra tabla) filtrados por esa población. Tengo el campo "población" en ambos formularios. Más o menos sé hacerlo por consulta, pero la idea que barajo es hacerlo mediante código en el evento "click" (pulsar botón), pues a la vez de filtrar, el usuario se habrá logado. Eso no sé cómo hacerlo o plantearlo... No sé si se me entiende más o menos. Gracias de nuevo.
|
Publicado por: mounir
Fecha de publicación: 21/Noviembre/2019 a las 20:47
Hola!
Si te he entendido bien, podrías utilizar el http://www.accessyexcel.com/como-usar-en-access-y-vba-el-comando-docmd-openform-para-abrir-un-formulario/" rel="nofollow - Objeto DoCmd haciendo uso de "WhereCondition" filtrando por Usuario y Población. Tambien podrías utilizar la proiedad OpenArgs como en este http://www.mvp-access.com/foro/varios-argumentos_topic84824.html" rel="nofollow - hilo .
------------- Un Saludo.
|
Publicado por: teogf
Fecha de publicación: 21/Noviembre/2019 a las 22:48
|
Hola,
Este enlace creo que te puede interesar: https://docs.microsoft.com/es-es/office/vba/api/access.docmd.applyfilter" rel="nofollow - https://docs.microsoft.com/es-es/office/vba/api/access.docmd.applyfilter
Saludos,
|
Publicado por: maserrano
Fecha de publicación: 22/Noviembre/2019 a las 12:36
|
Hola buenas. Si lo he entendido bien, en el evento clic de un botón coloco:
DoCmd.OpenForm "Ficha", , , "poblacion=cboPoblacion"
DoCmd.OpenForm "Ficha", , , "poblacion=Me.cboPoblacion"
Supongo que del campo poblacion me coge el valor del combo (cboPoblacion) y me filtrará en el formulario Ficha la elección de ese combo. Qué hago mal?? Me abre el formulario Ficha en blanco??
Vaya, que si hago:
DoCmd.OpenForm "Ficha", , , "poblacion='Gandía'"
..., si me filtra bien por Gandía.
Si, además, hubiese un formulario intermedio al de Ficha, ¿se perdería la información de la elección del combo? Qué debería hacer? Gracias Mil.
|
Publicado por: teogf
Fecha de publicación: 22/Noviembre/2019 a las 15:33
|
Hola Maserrano,
Yo lo que hago es pasar el valor del combo
a un formulario intermediario que representa una lista y lo filtro por ese
dato. Desde allí salto al formulario que contiene la ficha.
Por otro lado, tengo en cuenta de que el
formulario que representa la lista no se puede cerrar, ya que, sino como tú
dices, podría perder el valor del filtro.
Otra posibilidad sería utilizar una
variable pública y esta llenarla con el valor del combo, de esta manera siempre
podría cerrar el formulario intermedio.
No sé si me explicado. Pero podría enseñártelo
como yo lo hago, por si te sirve de ayuda. Saludos,
|
Publicado por: mounir
Fecha de publicación: 22/Noviembre/2019 a las 17:38
Hola!
Otra cuestión es saber que devuelve el "cboPoblacion", ya que puede tratarse de un cuadro combinados con mas de una columna. Para saberlo utiliza MsgBox:
MsgBox Me.cboPoblacion, MsgBox Me.cboPoblacion.Column(0) o MsgBox Me.cboPoblacion.Column(1)
------------- Un Saludo.
|
Publicado por: maserrano
Fecha de publicación: 22/Noviembre/2019 a las 22:42
|
Vale. He utilizado una variable que declaro tal que:
Dim VPob As String VPob = Nz(Me.cbopoblacion.Value, "")
..., y en el formulario que lo abre al hacer click en el evento he puesto:
DoCmd.OpenForm "Ficha", , , "subdireccion=VPob"
Pues al hace clic, me sale un cuadro de mensaje que me dice:
Introduzca el valor del parámetro VPob
..., el caso es que lo pongo y me filtra, pero no me lo coge del combo tal cual lo he puesto. Qué me falla??
|
Publicado por: mounir
Fecha de publicación: 22/Noviembre/2019 a las 22:46
Hola!
Has hecho las pruebas que te comenté en mi mensaje anterior?
------------- Un Saludo.
|
Publicado por: teogf
Fecha de publicación: 22/Noviembre/2019 a las 23:28
Prueba esto:
Si VPob es texto:
DoCmd.OpenForm "Ficha", , , "[subdireccion]=“ & VPob
Si VPob es número:
DoCmd.OpenForm "Ficha", , , "[subdireccion]=‘ “ & VPob & “ ‘ “
|
Publicado por: maserrano
Fecha de publicación: 22/Noviembre/2019 a las 23:44
|
Perdón a todos. Me pongo a ello. Los niños.... Ciao
|
Publicado por: maserrano
Fecha de publicación: 23/Noviembre/2019 a las 00:17
|
Veamos Sr. Mounir.
MsgBox Me.cboPoblacion : Indica la Población (p.e, Gandía)
MsgBox Me.cboPoblacion.Column(0) : Igual, Indica la Población (p.e, Gandía)
MsgBox Me.cboPoblacion.Column(1) : error 94 en tiempoo de ejecución Uso no válido de Null
error de compilación no se encontró el método o el dato miembro
En relación al sr. teogf, lo primero, disculpa, pero he tenido una tarde... (tengo mellizos pero no quiero que sea escusa).
He probado y al ser texto, he usado:
DoCmd.OpenForm "Ficha", , , "[subdireccion]=“ & VPob
se ha producido el error '3075' en tiempo de ejecución: Error de sintaxis...
Me pongo a ver que no he tenido tiempo.
Muchas Gracias
|
Publicado por: teogf
Fecha de publicación: 23/Noviembre/2019 a las 00:26
Disculpa, te lo he dicho al revés:
Si VPob es Numeeo/
DoCmd.OpenForm "Ficha", , , "[subdireccion]=“ & VPob
Si VPob es texto:
DoCmd.OpenForm "Ficha", , , "[subdireccion]=‘ “ & VPob & “ ‘ “
Disculpa!
|
Publicado por: maserrano
Fecha de publicación: 23/Noviembre/2019 a las 01:37
|
Probé los dos casos y me da el siguiente error con texto:
DoCmd.OpenForm "Ficha", , , "[subdireccion]=‘ “ & VPob & “ ‘ “"
se ha producido el error '3075' en tiempo de ejecución: Error de sintaxis (falta operador) en la expresión de consulta '[subdirección]= '" & VPob &"'"
|
Publicado por: maserrano
Fecha de publicación: 23/Noviembre/2019 a las 17:34
|
Porqué da ese mensaje de error? La verdad no lo entiendo que no está bien... Si alguien ve algo diferente, gracias. Saludos.
|
Publicado por: maserrano
Fecha de publicación: 23/Noviembre/2019 a las 20:02
Bueno, doy las gracias a todos y, en especial a teo (teogf), que ha echado un buen rato conmigo para solucionarlo.El problema radicaba en la declaración de la variable que había que hacerla de forma pública, y para todo el proyecto; de esta forma, la información no se pierde y se actualiza.
Se crea un módulo tal que:
Public vpFrm_Comenzar_cboSubdireccion As String
y después se llama al valor de esa variable en el formulario o cualquier formulario, abierto, cerrado, da igual.
Yo, declaraba mal a nivel público para el proyecto y, al cerrar el formulario de paso, perdía la información.
Gracias de nuevo. El hilo se puede cerrar por mi parte.
|
|