Abrir informe access con origen de datos en cuadro combinado

Tengo un informe tipo para varias tablas, y tengo problemas para conseguir que me abra el informe cogiendo el "Origen del Registro" desde un cuadro combinado en el cual están los nombres de las tablas.

He intentado por macro poniendo la expresión en el Where: OrigenDelRegistro = Forms![INICIO]![COMBO_COSTES] , me abre el informe pero no muestra la tabla.

No sé si me he explicado bien.

1 respuesta

Respuesta
1

EL origen del registro (RecordSource) no es lo mismo que la condicion (el Where), aclaremos esto:

El RecordSource es el conjunto de datos que se cargan en el informe.
El Where es una condición para ¿Apartar? Un subconjunto de los datos y facilitar su manejo.

Es natural que si solo hay condiciones, al no haber datos (RecordSource ="") no habrá nada que filtrar ni mostrar.

En este caso creo que una solución seria que en el combo (en una columna oculta) tenga el nombre de la tabla/consulta/o SQL que se utilice como origen de datos y (en el informe) se hace referencia a la columna del combo.

Tiene que quedar muy claro que una vez asignado el origen de datos y ejecutado el informe, un cambio en el combo no hará nada, para que muestre otro de los posibles orígenes hay que cerrar el informe y volverlo a abrir.

Un informe no se comporta como un formulario uno (el formulario) es dinámico y responde a la interactuación del usuario, otro (el informe) es estático y una vez abierto solo 'se retoca' (si esta en papel) con un rotulador o Tipex.

Gracias Enrique

Me temo que no me expliqué bien.

Lo que necesito es asignarle al RecordSource del informe, el nombre de la tabla desde un cuadro combinado, por macro o vba.

Es decir, tengo dos tablas A y B, y un informe con el RecordSource en blanco para que cuando el usuario seleccione en el cuadro combinado donde están los nombres de las tablas le imprima el informe con la tabla seleccionada.

No sé si lo he aclarado o lo he liado más...

Para poder asignarle un origen de datos 'de forma externa' a un informe, se tendría que abrir en modo diseño para asignárselo, guardarlo y tras ello abrirlo 'de forma normal'.

Como opciones alternativas están en que se le envíe el dato referente en la llamada (opción: OpenArgs) o que el informe lo tome en su evento Open (lo que he propuesto).

En cualquier caso para evitar errores en tiempo de ejecución se ha de verificar que el informe lo permita (por ejemplo, que no este ya abierto si la asignación es externa) o que el origen este a disposición (si la asignación se hace desde el mismo informe)

En los métodos propuestos, es en el evento Open donde se le asigna el origen de datos o se aborta la acción al no poder asignar origen de datos (descartada la opción de modificar diseño).

Estoy intentado con el siguiente código:

Private Sub COMBO_COSTES_AfterUpdate()

Dim usa_combo As String

usa_combo = Me.COMBO_COSTES
DoCmd.OpenReport "INFORME_COSTES", acViewNormal
Reports![INFORME_COSTES].Report.RecordSource = "SELECT * FROM [usa_combo]"
End Sub

Me imprime sin datos y dice que no ese informe no existe o no está abierto

No doy con ello...gracias de nuevo Enrique

Si se maneja un mínimo de VBA hay bastantes alternativas, en tu caso la mas sencilla (dado el método que aplicas) es utilizar OpenArgs en la llamada y hacer la asignación en el evento Open del informe.

En el evento OPEN aun no se genero el informe y se puede 'manipular' alguna que otra cosa (o muchas si tienes experiencia y ... ganas).

Sobre el error que recibes:
NO SE PUEDE modificar el origen de datos para el informe con el informe ya ejecutado.
(Error mío, creí que quedo claro en mi primera respuesta).

Si en el combo están los nombres de las tablas, el combo tiene una sola columna (o la columna con las tablas es la predeterminada), se le envía en la llamada el dato imprescindible (el nombre de la tabla)

Antes:

DoCmd. OpenReport "INFORME_COSTES", acViewNormal

Después:

DoCmd. OpenReport "INFORME_COSTES", acViewNormal,,,, Me. COMBO_COSTES

Añadir esto en el evento Open del informe:

Private Sub Report_Open(Cancel As Integer)
If Nz(Me.OpenArgs, "") = "" Then Cancel = True: Exit Sub
Me.RecordSource = Me.OpenArgs
End Sub

La primera línea verifica que hay algo que asignar (si se abre el informe directamente OpenArgs = Null y no se abre).
Con la segunda se le asigna como origen de datos lo que 'se supone' que es el nombre de la tabla o consulta seleccionada en el combo.

Que quede meridianamente claro que antes de seleccionar otro origen de datos en el combo, hay que cerrar el informe si esta abierto.
Aconsejo condicionarlo antes de efectuar la apertura, esto es, verificar si esta abierto el informe y de estarlo: cerrarlo para poder volver a abrirlo, símil de 'antes de entrar, dejen salir'.

Ojo a los espacios que se añaden por error al utilizar el modo código (el espacio después del punto en Me.Combo_Costes)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas