** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Tabla MSysResources
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoTabla MSysResources

 Responder Responder
Autor
Mensaje
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Tema: Tabla MSysResources
    Enviado: 06/Abril/2020 a las 19:59
Buenas tardes:

Me ha sorprendido ver que una base de datos pesaba casi 80 Mb.
En ella tengo cuatro imágenes jpg compartidas que uso en varios informes.
He abierto la tabla MSysResources y veo que dos de esas imagenes se han ido "clonando" añadiendo un número al final del nombre Logo1, Logo2, Logo3..... y así hasta crear más de cincuenta y con la otra imagen Sello igual.
He borrado todos estos duplicados y la base ha vuelto a pesar los 12 Mb que ocupaba antes.

La pregunta es evidente: Porqué se han generados todas esas copias de esas dos imagenes.

La base de datos se repara y compacta al cerrar pero, a pesar de ello, ha ocurrido.

Alguien me pueda dar una pista de porque  sucede esto y, sobre todo, como corregirlo para que no vuelva a ocurrir.

Muchas gracias.

Pido a los administradores que me cierren los hilos que he pedido cerrar. Gracias.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 06/Abril/2020 a las 20:51
Hay un par de posibles motivos que tengo detectados

- si en algún sitio del código haces una asignación de la propiedad Picture mediante VBA a un control dónde la imagen es compartida
- si has hecho una copia del formulario

Yo tengo la precaución de revisar después de cada modificación de formularios para ver si me ha creado "copias" 1_nombrefichero, 2_nombrefichero, etc. y las elimino.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Chea1 Ver desplegable
Moderador
Moderador


Unido: 20/Noviembre/2005
Localización: España
Estado: Sin conexión
Puntos: 4143
Enlace directo a este mensaje Enviado: 06/Abril/2020 a las 21:40
Otra posibilidad es que en vez de seleccionar una imagen compartida de la propia BD, hayas seleccionado varias veces la misma imagen desde una carpeta. 

En la cinta de opciones Diseño->Insertar imagen te muestra una galería de las imágenes compartidas y un icono de carpeta con "Examinar". Si seleccionas una una imagen de la galería, estás aprovechando una imagen compartida, pero si seleccionas una imagen en "Examinar" y luego la pones como compartida, estás añadiendo una nueva imagen a MsysResources.

Saludos
José Bengoechea Ibaceta
Mi página

Mi otra página
Arriba
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Enviado: 07/Abril/2020 a las 18:10
Siempre que he metido una imagen en un informe ha sido una imagen compartida.
No creo haber hecho copias del formulario.
Estaré atento para ver si descubro porqué puede ser.

Y ahora me surge una pregunta.
En el botón para salir de la aplicación, ¿se podría incluir el código que borrase estos registros de la tabla MSysResources?

No creo que sea muy complicado para vosotros.

Gracias.

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 07/Abril/2020 a las 18:30
Tan complicado como una consulta de eliminación de datos.

Ahora bien, la próxima apertura de la base de datos ya no mostrará ninguna imagen.
Xavi, un minyó de Terrassa

Mi web
Arriba
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Enviado: 07/Abril/2020 a las 18:53
Hombre yo solo pretendo elinar aquellas cuyo nombre comienze por un número.
¿Es eso posible?
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 07/Abril/2020 a las 19:56
Usando una clausula Where similar a esto
 IsNumeric(Left([Name], 1))

pero... y si algún otro recurso tiene en su nombre un numero al principio sin ser por ello un recurso duplicado?


Editado por Dabellaso - 07/Abril/2020 a las 19:56
El saber no ocupa lugar, sólo tiempo
Arriba
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Enviado: 07/Abril/2020 a las 21:02
Yo no tengo en la tabla MSysResources ningun registro que tenga como primer caracter del nombre un número.
Por lo tanto, entiendo que, como todos los que el sistema, por los motivos que sea, genere nuevos van a tener un número como primer caracter, ya que serán copia de otro existente, los puedo borrar y eso es lo que pretendo.

Pero como lo pongo en una consulta de eliminación?
Para ejecutar esa consulta antes de salir del programa.

Edito:
He puesto en la consulta de eliminación
Eliminar donde: EsNum(Izq([Name];1))
pero no lo borra. No da error, parece que funciona, pero el archivo sigue ahí.


Editado por fredy8alc - 07/Abril/2020 a las 21:12
Arriba
Dabellaso Ver desplegable
Asiduo
Asiduo


Unido: 18/Noviembre/2012
Localización: España
Estado: Sin conexión
Puntos: 338
Enlace directo a este mensaje Enviado: 07/Abril/2020 a las 21:45
Ni que decir tiene, que MSysResources es una tabla de sistema, por tanto haz las pruebas en una copia de tu base de datos, no en la original, no sea que...Dead 

Dicho esto, comprueba que la consulta arroja los resultados que deseas antes. Hazlo creando una consulta de selección normal con esa cláusula Where.

Si los resultados son correctos, prueba a lanzar la consulta de eliminación (siempre en una copia de tu db origina)

Prueba también a cambiar los atributos de la tabla quitándole el atributo de sistema, y/o el de oculto.
Podrás dejarlos como estaban después de "limpiar" la tabla

Lo que me resulta raro es que no recibas ni el aviso previo al borrado (Eso indica que: o no borró, o tienes los avisos desactivados), ni tampoco recibas error alguno.

Puedes poner la consulta tal y cómo la tienes?


El saber no ocupa lugar, sólo tiempo
Arriba
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Enviado: 09/Abril/2020 a las 18:23
Buenas tardes.

Ya he descubierto como se generan estos archivos.

Cada vez que abro un informe se ejecuta este código:

Private Sub Report_Load()
If (Forms!Verificado!MeterImagen = -1) Then
Me.Picture = getImageFromMsys("ImagenFondo")
Else
Me.Picture = ""
End If
End Sub

Aunque la imagen que mete se llama ImagenFondo, cada vez que se abre el informe se genera, en la tabla MSysResources, un nuevo registro que inserta la imagen pero con nombre: 1_tmp, 2_tmp, 3_tmp .....etc.

Pido ayuda para:
1 evitar que se generen eso registros 1_tmp, 2_tmp, etc
2 si no es posible evitar que se generen, borrarlos al salir del informe (si es posible)
3 si no es posible borrarlos al salir del informe, borrarlos al cerrar el programa.

Por favor una ayudita.
Gracias.


Edito para decir que:
He puesto este código en el evento Al cerrar

Private Sub Report_Close()
Dim SQL As String
SQL = "Delete MSysResources.Name FROM MSysResources WHERE MSysResources.Name='tmp' Or MSysResources.Name = '1_tmp'"
DoCmd.RunSQL SQL
End Sub

y se borra el registro creado si se llama tmp o 1_tmp
pero me gustaria no tener que borrarlo y, simplemente, que no se crease
Alguien me puede decir como

Gracias.







Editado por fredy8alc - 09/Abril/2020 a las 18:46
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 10/Abril/2020 a las 11:27
Para utilizar una imagen compartida en un control imagen es tan "simple" como asignarle a la propiedad Picture el nombre directamente de la imagen.

Me.Picture = "ImagenFondo"

Siendo ImagenFondo el valor del campo Name del registro de la tabla MSysResources.

De esa forma no se crea el nuevo registro.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Enviado: 10/Abril/2020 a las 12:03
Muchas gracias Xavi.
Efectivamente, así ya no se crea ese nuevo registro.

Pero, porque con el código
Me.Picture = getImageFromMsys("ImagenFondo")
se crea ese registro tmp?

Saludos a todos.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 10/Abril/2020 a las 12:57
La función getImageFromMsys no es estándar por lo que difícilmente podemos saber lo que hace.
Xavi, un minyó de Terrassa

Mi web
Arriba
fredy8alc Ver desplegable
Asiduo
Asiduo


Unido: 19/Abril/2016
Localización: España
Estado: Sin conexión
Puntos: 239
Enlace directo a este mensaje Enviado: 10/Abril/2020 a las 13:23
OK

Muchas gracias.
Pues solucionado el tema.
Podemos cerrar este hilo.

Salud y saludos.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable