Abrir informe a través de cuadro combinado

He visto la respuesta que existe igual a esta pero algo debo estar haciendo mal. Paso a detallar lo que he hecho:

1. Genero un formulario con un cuadro combinado donde se selecciona el nombre de un cliente. A ese campo le he llamado cbocliente.

2. En ese formulario en Eventos\Después de actualizar genero un procedimiento de evento que escribo a continuación. (He utilizado la información de la ora pregunta, no se VBA).

2.1Private Sub cbocliente_AfterUpdate()
Private Sub cbocliente_AfterUpdate()
Dim vcliente As Variant
vcliente = Me.cbocliente.Value
If IsNull(vTerr) Then Exit Sub
DoCmd.OpenReport "REFERENCIAS_DIGITALES_INTEGRIDAD_POR_CLIENTE", acViewPreview, , "[valorcliente] ='" & vcliente & "'"
End Sub

3. Hago un informe llamado REFERENCIAS_DIGITALES_INTEGRIDAD_POR_CLIENTE donde el origen del registro es la consulta REFERENCIAS_DIGITALES_INTEGRIDAD_SEL_CLIENTE. 

4. La SQL de la consulta entiendo que tiene que recibir el valor que sale del combo (vcliente). La envío como pantallazo porque me da error al tener demasiadas mayúsculas.

5. Si ejecuto solo el informe me pide el valor de vcliente.

6. Si ejecuto desde el formulario me da el siguiente error que envío.

1 Respuesta

Respuesta
2

Errores que estás cometiendo:

1º/ Si el código lo tienes exactamente como lo has puesto aquí, te sobra una linea Private Sub cbocliente_AfterUpdate() por eso lo del error de nombre ambiguo. O quizás tengas por ahí otro control llamado cboCliente...

2º/ Con la instrucción DoCmd.OpenReport ya filtras el informe en el cliente (en la parte del [valorcliente] ='" & vcliente & "'"), por lo que no te hace falta añadir ese filtro a la SQL.

3º/ Si lo quieres hacer a través de la consulta, la SQL correcta sería (y pongo solo la parte del WHERE):

... WHERE CLIENTES.NOMBRE_CLIENTE=[Formularios]![NombreFormulario]![cbocliente] ORDER BY ...

Y ya no te haría falta poner el filtro en el DoCmd. OpenReport.

4º/ Verifica, además, que tu cuadro combinado devuelva efectivamente el nombre del cliente y no un número, porque si lo has hecho por medio del asistente y la tabla de clientes tiene un ID es muy probable que sea ese el valor que devuelva.

Un saludo.


bit.ly/NkSvAcademy   /    bit.ly/ForoNkSv 

Otro fallito que tienes, seguramente porque se te pasó cambiarlo de la otra respuesta, es que esta línea:

If IsNull(vTerr) Then Exit Sub

la tendrías que cambiar por esta otra:

If IsNull(vcliente) Then Exit Sub

Porque no tienes ninguna variable declarada llamada vTerr.

Muchas gracias. Te voy respondiendo:

1. No me había fijado que había dos filas iguales. Ya lo he quitado.

2. he quitado el where de la sentencia. Y al ejecutar el formulario me sale el combo para que introduzca [valorcliente]. Entendía que debería pasar el valor y no preguntar.

Muchas gracias. Te explico lo que he hecho en la segunda opción.

Genero nuevo formulario SELECCIÓN CLIENTE V1 con el cuadro combinado cbocliente y donde el evento ejecuta la siguiente acción

el formulario ejecuta la consulta REFERENCIAS_DIGITALES_INTEGRIDAD_SEL_CLIENTE cuya sentencia SQL es la siguiente

Al ejecutarlo, me pide sale el combo para pedirme el valor Formularios]![NombreFormulario]![cbocliente].

Además tengo otro problema. Si esta consulta la ejecuto sola sin venir del formulario, no me saca datos.

Por ello he modificado la consulta y he puesto un like

El resultado es el mismo:

Si ejecuto desde formulario me pide el combo que introduzca valor y si ejecuto la query sola solo me saca información con un valor

Tienes que cambiar donde yo puse NombreFormulario por el nombre de tu formulario, je je.

Tu criterio, en definitiva, tendrá que ser:

WHERE NOMBRE_CLIENTE LIKE "*" & [Formularios]![SELECCIÓN CLIENTE V1]![cbocliente] & "*"

Revisando tu primera respuesta (2. he quitado el where de la sentencia. Y al ejecutar el formulario me sale el combo para que introduzca [valorcliente]. Entendía que debería pasar el valor y no preguntar.) Acabo de ver el problema:

en el código del DoCmd.OpenReport, el criterio que tienes es [valorcliente] ='" & vcliente & "'", pero en tu consulta no existe valorcliente, sino que tendrías que poner NOMBRE_CLIENTE, es decir, si pones:

DoCmd.OpenReport "REFERENCIAS_DIGITALES_INTEGRIDAD_POR_CLIENTE", acViewPreview, , "[NOMBRE_CLIENTE] ='" & vcliente & "'"

Te funcionará (o cambia por LIKE, si quieres la búsqueda por aproximación)

Sobre tu primera respuesta. Ya he incluido en la consulta la parte de

WHERE (((CLIENTES.NOMBRE_CLIENTE) like "*"&[Formularios]![SELECCION CLIENTE v1]![cbocliente]&"*"));.

Si ejecuto desde la  consulta me devuelve todas las filas. Si ejecuto desde el formulario, no me pide ningún valor pero no devuelve filas.

PD: Muchas gracias por tu paciencia

Sobre tu segunda respuesta:

he incluido la variable como me indicaste

y el informe ejecuta una consulta sin where.

Ya no me pide nada, pero obtiene la consulta  sale vacía. Si pongo LIKE lo tengo que poner con "*"& (CLIENTE.[NOMBRE_CLIENTE])&"*"??.

Muchas gracias

Sobre la primera cuestión: el criterio es correcto, por lo que no comprendo cómo es que te devuelve todas las filas desde la consulta y ninguna desde el formulario (entiendo que el el formulario tienes seleccionado un valor en cbocliente en cualquier caso)

Sobre la segunda:

Si te sale en blanco (con el criterio con =) es porque ningún registro cumple esa condición.

Si quieres usar el LIKE, yo lo pondría así:

DoCmd.OpenReport "REFERENCIAS_DIGITALES_INTEGRIDAD_POR_CLIENTE", acViewPreview, , "CLIENTES.NOMBRE_CLIENTE LIKE '*" & vcliente & "*'"

(Fíjate la construcción: LIKE-espacio-comilla simple-asterisco-comillas dobles, y después comilla doble-asterisco-comilla simple-comilla doble)

Si ves que no te sale, ¿puedes enviarme una copia de tu BD, aunque sea con unos cuantos datos inventados?

Sobre la primera cuestion: si, esta selecccionado un valor. De hecho si lo dejo en blanco y doy intro no ejecuta el informe.

Sobre la segunda cuestion: he cambiado la sentencia pero sigue igual. 

me estoy volviendo loca¡¡¡. Preparo una bbdd con menos datos y al asegurarme que seguía igual antes de mandarlo resulta que esta funcionando. Lo único que he cambiado son las descripciones de las tablas tipos y he borrado filas. 

Creo que ya se donde está el problema..... en la tabla detalle hay tipo que NO ESTÁN RELLENOS y al hacer el full no devuelve datos. Voy a confirmar esto y te digo

Quedo a la espera.

De todos modos, te dejo un correo dónde me puedes enviar la BD si quieres (o la de la otra pregunta que tienes a la espera de respuesta): [email protected]

El correo solo permite recibir, no enviar, por lo que te respondería a través de esta web.

Ya lo he conseguido¡¡¡¡¡¡¡

El problema estaba en que en el cuadro combinado la columna dependiente he puesto la 1 (cod_cliente) y no la 2 (nombre_cliente). 

Al copiarte a una nueva bbdd como las despcriociones he puesto cliente 1 ...cliente 6, proyecto 1 proyecto 2, etc.. como el like cogia datos..

Muchísimas gracias por la paciencia.

Jejeje... eso ya te lo comenté en el punto 4 de mi primera respuesta... "4º/ Verifica, además, que tu cuadro combinado devuelva efectivamente el nombre del cliente y no un número, porque si lo has hecho por medio del asistente y la tabla de clientes tiene un ID es muy probable que sea ese el valor que devuelva."

Pero bueno, me alegra ver que has localizado el error y lo tienes ya todo funcionado correctamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas