** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - cambiar origen de datos a informe
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradocambiar origen de datos a informe

 Responder Responder
Autor
Mensaje
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Enlace directo a este mensaje Tema: cambiar origen de datos a informe
    Enviado: 23/Mayo/2022 a las 17:17
Hola.
Una vez resuelta la duda anterior, que no sabía utilizar variables en instrucciones SQL, me encuentro con otro problema parecido:
Tengo un informe recién creado, copiando otro y cambiándole el nombre, tal como sigue:

DoCmd.CopyObject , "Exclusiones " & vejercicio & " iniciadas", acReport, "Exclusiones 2020 iniciadas"

donde la variable pública vejercicio proviene de un cuadro combinado de un formulario.

Si en el cuadro combinado escojo, por ejemplo, 2022, el nuevo informe se llama "Exclusiones 2022 iniciadas"

Ahora mismo tiene como origen de datos la query que era origen de datos del informe copiado (el de 2020).
Quiero cambiar el origen de datos a la query recién creada con el nuevo vejercicio:

dim nomConsulta_iniciadas, nomInforme_iniciadas
nomConsulta_iniciadas ="Exclusiones " & vejercicio & " iniciadas"
nomInforme_iniciadas = "Exclusiones " & vejercicio & " iniciadas"

y hago ésto:

Dim informe as report

    For Each informe In Reports
    
        If informe.Name = nomInforme_iniciadas Then
            
            informe.RecordSource = nomConsulta_iniciadas
            Exit For
        
        End If
        
    Next informe

No funciona. El informe sigue con los datos del informe original desde el cual se copió.
Seguro que algo (o mucho) he hecho mal...

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 24/Mayo/2022 a las 00:01
No puedes asignar el recordsource a la brava como haces tu. Para que quede "fijado" debes abrir el informe en modo diseño (pueden hacerlo en modo oculto), cambiar el Recordsource y cerrar el informe guardando.

(El siguiente comentario es desde el desconocimiento de tu estructura porque he leído tus últimos mensajes en diagonal)

Tengo la sensación que no manejas una estructura de datos correcta y, menos aun, los mecanismos para manejar la información.

Parece que estas replicando consultas y reports que, en esencia tienen los mismos campos y tipo de información y dónde lo único que es diferente es el año. Ese tipo de información se acostumbra a manejar con una sola tabla que contiene un campo Año y con filtros en las consultas y resto de objetos.
Por otro lado la copia de objetos conseguirá un "engorde" continuo de la base de datos. Cada vez que se crea un objeto la base de datos crece para darle cabida. Cuando se elimina ese objeto, la base de datos no encoge. Tu parece que estas creando objetos continuamente.

Lo dicho, tengo la sensación que no lo manejas de forma eficiente.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Enlace directo a este mensaje Enviado: 24/Mayo/2022 a las 09:10
La verdad es que llevas toda la razón. No es una base de datos nada eficiente.
Me la planteé en su día dividiendo en tablas, consultas, etc por años, con lo que cada año aumenta en un montón de objetos.
Me temo que te voy a hacer caso y voy a rehacerla totalmente, unificando objetos y filtrando datos, como dices.
Me surgirán un montón de dudas porque, como resulta obvio, soy muy novato en ésto. Agradeceré tengais paciencia conmigo...
Un saludo.
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Enlace directo a este mensaje Enviado: 24/Mayo/2022 a las 14:56
Xavi: estoy siguiendo tus consejos y estoy intentando unificar en una sola tabla lo que antes eran una tabla por año.
Para ello, añado un campo EJERCICIO (texto corto) en cada tabla de año y estoy intentando rellenar dicho campo en todos los registros con la misma cadena, pero algo no hago bien:


Sub rellenar_campo_año()

vejercicio = str(InputBox("Elegir ejercicio: "))

'MsgBox vejercicio

Dim master_excl As dao.TableDef
Dim nom_master_excl
nom_master_excl = "Master_exclusiones_ " & vejercicio

'MsgBox nom_master_excl

For Each master_excl In CurrentDb.TableDefs
    If master_excl.Name = nom_master_excl Then
    
        Dim rst As dao.Recordset
        Set rst = CurrentDb.OpenRecordset(" & master_excl & ")
        rst.MoveFirst
        Do Until rst.EOF
            rst.Edit
            rst!EJERCICIO = vejercicio
            rst.Update
            rst.MoveNext
        Loop
        rst.Close
        Set rst = Nothing

    End If

Next

End Sub

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 24/Mayo/2022 a las 15:15
Hola,

Antes de nada no indicas cual es el error obtenido.

Punto 1: si es un ejercicio y, por lo tanto, un año (supongo), ¿porqué un campo de texto corto? Yo utilizaría un Numero entero.

Punto 2: Si vas a actualizar los registros de una tabla que cumplen un criterio, ¿porqué no utilizas una consulta de actualización?

Punto 3: En algunas ocasiones la apertura de un recordset dónde se utilice el nombre de la tabla ma ha dado problemas para actualizar datos. Desde hace muchisimo tiempo me acostumbre a abrir un recordset sobre una consulta: Set rst = CurrentDb.OpenRecordset("SELECT * FROM UnaTabla")
Este punto 3, si utilizas una consulta de actualización, ya no tiene validez para este caso concreto

Punto 4: aplicando todo lo anterior se podría llegar a conseguir hacerlo todo en muy pocas líneas:
- Declaras la variable intEjercicio
- Pides valor con InputBox
- Lanzas consulta de actualización

3 líneas si obviamos errores

Punto 5: para practicar, podrias crear una función que haga eso tomando el ejercicio como parametro.

Function CambiaAños(intAño As Integer)
' Aquí haces los pasos indicados pero, en lugar de pedir el año, lo tomas del argumento
End Function

Un saludo


Xavi, un minyó de Terrassa

Mi web
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Enlace directo a este mensaje Enviado: 24/Mayo/2022 a las 18:52
Ok. 
Mañana pruebo todo lo que me has explicado, cuando esté en el trabajo, ya que no puedo sacar de allí los datos.
Muchas gracias.
Un saludo.
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Enlace directo a este mensaje Enviado: 26/Mayo/2022 a las 18:22
Gracias por la ayuda.
Ya se puede cerrar el hilo.
Arriba
Kublai Ver desplegable
Habitual
Habitual


Unido: 11/Julio/2020
Localización: Murcia
Estado: Sin conexión
Puntos: 162
Enlace directo a este mensaje Enviado: 25/Julio/2023 a las 09:25
Por favor, cerrad este hilo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable