Filtros y nuevos registros

Tengo una BBDD de clientes/proveedores/cadenas.
He creado un formulario con varios elementos donde se visualizan TODOS los clientes (que denomino "Cliente Múltiple").
En este formulario quería poder hacer búsquedas de clientes por Población y que me muestre SOLO los resultados.
Ademas, (esto lo he conseguido) cuando se hace DblClick sobre el nombre de n cliente, se abre otro formulario (que lo denomino "ficha cliente"). Le añadí el botón de comando AÑADIR REGISTRO para poder agregar desde este formulario NUevos Clientes, pero éstos no quedan reflejados en mi tabla "cliente múltiple"...
¿Puedes ayudarme? No soy muy experta en Access ni VB estoy aprendiendo por mi misma...

1 Respuesta

Respuesta
1
Te voy a proponer un sistema a través de un combo para seleccionar la población y después filtrar por el valor que en él selecciones.
Vamos allá:
1.- Crea una consulta basada en la tabla donde tienes los datos de las poblaciones (consulta en vista diseño). Al grid de la consulta le añades sólo el campo donde guardas la población. Convierte esa consulta en una consulta de totales. Guarda la consulta con el nombre CPoblaciones
2.- En el formulario insertas un cuadro combinado. En el asistente le dices que quieres coger los datos de una tabla/consulta, y le seleccionas la consulta que acabas de crear. Le añades el único campo que hay.
3.- A ese combo le pones de nombre cboPoblacion. Para ello sacas sus propiedades, te vas a la pestaña Otras y en la propiedad Nombre borras el valor por defecto y le pones cboPoblacion
4.- Ahora te vas a la pestaña Eventos y seleccionas el evento "Después de actualizar". Te pones en la parte blanca que hay a la derecha y verás que te aparecerá un pequeño botón con puntos suspensivos. Haces click sobre él y en la ventana que te sale le dices que quieres generar código.
5.- Se te abrirá la ventana de VB. Entre las dos líneas que te salen por defecto le pones este código (en negrita te pongo los valores que debes cambiar por los de tu BD):
---
Private Sub...
    Dim vPob As Variant
    vPob = Me.cboPoblacion.Value
    If IsNull(vPob) then Exit Sub
    DoCmd.OpenForm "Cliente Múltiple", , , "[Poblacion] = '" & vPob & "'"
End Sub
---
Cliente Múltiple-> Comprueba que es el nombre exacto de tu formulario.
Población-> Tienes que poner el nombre del campo que contiene el dato de la población.
Y eso es todo por lo que se refiere a este punto. Ahora, cuando selecciones una población del combo, el formulario te filtrará los registros por esa población.
Si quieres puedes añadir un botón para quitar el filtro. Añades un botón de comando, botón de la derecha->generar evento->generar código, y le pones este código:
---
Private Sub...
If Me.FilterOn = True Then
    Me.FilterOn = False
End If
End Sub
---
Respecto a la segunda parte de tu consulta, la del formulario "ficha cliente", supongo que debe estar basada en la tabla donde guardas los datos. ¿No estarás diciendo que, tras añadirlo, no lo puedes ver en el formulario "cliente múltiple"? Si es así (que no te aparece en el formulario cliente múltiple) esto es porque no se refresca la información del formulario. Eso tiene una solución muy sencilla:
El formulario "ficha cliente" debe poderse cerrar de alguna manera. Supongo que tendrás un botón para ello. Si no lo tienes pues nada, a poner uno, e igual que el otro le creas código y le pones lo siguiente:
---
Private Sub...
DoCmd.Close acForm, Me.Name
Forms![Cliente Múltiple].Refresh
End Sub
---
Cliente Múltiple-> Comprueba que sea el nombre exacto de tu formulario.
Ahora, en teoría, el formulario ya ha refrescado la información, y podrás ver el nuevo cliente.
Bueno. Si tienes algún problema o alguna duda me lo comentas.
Hola!
 Tengo una BBDD de clientes/proveedores/cadenas.
He creado un formulario con varios elementos donde se visualizan TODOS los clientes (que denomino "Cliente Múltiple").
En este formulario quería poder hacer búsquedas de clientes por Población y que me muestre SOLO los resultados.
Ademas, (esto lo he conseguido) cuando se hace DblClick sobre el nombre de n cliente, se abre otro formulario (que lo denomino "ficha cliente"). Le añadí el botón de comando AÑADIR REGISTRO para poder agregar desde este formulario NUevos Clientes, pero éstos no quedan reflejados en mi tabla "cliente múltiple"...
¿Puedes ayudarme? No soy muy experta en Access ni VB estoy aprendiendo por mi misma...
Gracias
Necckito mil gracias por tu ayuda! Me ha sido de gran ayuda.
Una ultima cosa. Te dije que había conseguido que haciendo doble click sobre un nombre del cliente en concreto se abriera el formulario "ficha cliente" en el mismo registro... el formulario "ficha cliente" se abre... pero está en blanco! Sólo hay alguna ficha que se abre con los datos de éste...
Te explico lo que he hecho, a ver si me puedes explicar la razón... o tienes algún otro sistema...
En el formulario "Cliente Múltiple" añadí el campo IdCliente, al igual que lo añadí en el formulario "ficha cliente". En propiedades del campo Cliente del formulario "cliente múltiple" añadí el código:
Private Sub CLIENTE_DblClick(Cancel As Integer)
DoCmd.Openform "ficha cliente" , , , "idcliente=" & me.Idcliente
End Sub
Gracias de antemano otra vez"
Cuando programas en Access tienes que ponerte a nivel de crío de 3 años ;)
Imagínate que tú no tienes abierto ficha cliente ni cliente múltiple, y que tú eres Access, ¿OK? Si yo te digo así, de primeras, "abre la ficha cliente y muéstrame el cliente" lo más seguro es que me pidieras "¿De qué cliente quieres la ficha? Y si yo te contesto "Sí, aquel que tiene identificación de cliente" tú me dirías "Pero si todos tienen identificación de cliente!". En definitiva, que así tú no sabrías a qué cliente me refiero. ¿Entiendes la idea?
Evidentemente si yo te digo abre la ficha del cliente 24 tú no tendrías ningún problema.
En tu caso, ¿quién sabe que es el cliente 24? Desde luego, el formulario ficha cliente no, porque si lo supiera se te abriría sin problemas. Sólo nos queda un candidato: quien lo sabe es el formulario cliente múltiple, y sabe qué clientes quieres porque tú haces doble click sobre ese cliente en concreto. ¿OK?
Por ello el filtro te lo da el Idcliente del formulario cliente múltiple.
Vamos pues a coger ese valor, pasarlo a una variable y utilizarlo como filtro.
Tienes que cambiar el código y escribir este otro:
Private Sub CLIENTE_DblClick(Cancel As Integer)
---
Dim vCliente as Integer
vCliente = Me.Idcliente.Value
DoCmd.Openform "ficha cliente" , , , "idcliente=" & vCliente
End Sub
---
OJO! Piensa que ese Me. Idcliente se está refiriendo al formulario cliente múltiple porque el código está en un control de ese formulario.
Ahora, en teoría, debería funcionarte sin problemas.
Espero que te vaya bie. Si tienes dudas ya sabes ;)
Necckito, entiendo lo que me explicas de Access y tienes toda la razón... qué barbaridades se hacen cuando no se sabe del tema, ¿verdad?
Sigo haciendo algo mal porque, se me abre el formulario "ficha cliente" al hacer doble click, si, pero sigue estando en blanco (aunque filtrado)! Incluso cuando yo abro manualmente el formulario "ficha cliente" se me abre en blanco, como si no hubiera ninguna entrada!
Yo siempre para crear un formulario antes creo la consulta (no se si debe hacer así realmente o puedo coger los campos directamente de las tablas...). He chequeado qué datos se me abren en la consulta y éstos están bien!
Bueno, siento darte la lata... llevo muchos días intentando acabar esta BBDD y estoy un poco harta... creo que tendría que hacer un curso de Access o mejor de VB
Gracias otra vez
Creo que he leído demasiado rápido tu consulta, y la contestación que te he dado, si bien brillante (je, je...), está fuera de lugar. Me puedes dar un coscorrón ;) porque la barbaridad te la he dicho yo! Je, je... gajes del oficio ;)
Vamos a ver...
Para que el filtro te funcione el formulario ficha cliente debe estar basado en la tabla donde están los datos del cliente. Si no está basado en esa tabla, por mucho campo que le pongas, no te funcionará.
Así pues comprueba si el formulario está basado en dicha tabla. Si no lo está lo más práctico es que crees un nuevo formulario (evidentemente basado en susodicha tabla). Cuando lo tengas hecho lo sustituyes por ficha cliente (borras el antiguo y al nuevo le pones el mismo nombre).
Otra cosa: el Idcliente he dado por supuesto que era un valor numérico. Si es así tu código está bien. Si fuera un valor texto la sintaxis correcta es:
---
Dim vCliente as Integer
vCliente = Me.Idcliente.Value
DoCmd.Openform "ficha cliente" , , , "idcliente='" & vCliente & "'"
End Sub
---
Pruébalo, y ya me dirás.
Pues el formulario efectivamente estaba creado sobre la tabla de clientes, pero no funcionaba. De todas formas he vuelto a crear el formulario y ahora funciona!
Oie, siento la molestias ocasionadas. Queremos hacer cosas que no sabemos...
Pero tu me has ayudado muchísimo... lo dicho, muchas gracias
Muchísimas gracias por la ayuda y la rapidez!
OK. Me alegro mucho de que te funcione. A veces cambias algo sin darte cuenta en Access y todo deja de funcionar! Cosas de la vida...
Para cualquier cosa que necesites, ya sabes ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas