[RESUELTO]Descargar imagenes de mi base de datos

Discute sobre las herramientas de la base de datos
Responder
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

[RESUELTO]Descargar imagenes de mi base de datos

Mensaje por keybol »

Buenas he estado buscando por el foro pero no he visto nada al respecto, la cosa es que en mi formulario añado una imagen a un campo que tengo para ello Imagen [LONGVARBINARY], la cuestión es que adjunto esta imagen al campo pero no se si hay posibilidad de poder descargar esa imagen en un futuro, ya que si que puedo visualizarla
Última edición por keybol el Mar Ene 09, 2018 9:29 am, editado 1 vez en total.
LibreOffice 5.3 en Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Descargar imagenes de mi base de datos

Mensaje por RMG »

Hola,

Si la puedes visualizar, sí la tienes almacenada. Pero no es nada aconsejable almacenar imagenes en una BD ya que esta se hace muy pesada. En el foro, con una simple búsqueda veras otras posibilidades de como ver imagenes a traves de su URL.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

Re: Descargar imagenes de mi base de datos

Mensaje por keybol »

RMG escribió:Hola,

Si la puedes visualizar, sí la tienes almacenada. Pero no es nada aconsejable almacenar imagenes en una BD ya que esta se hace muy pesada. En el foro, con una simple búsqueda veras otras posibilidades de como ver imagenes a traves de su URL.

Saludos
El volunen de los campos de imagen es dinamico en libreoffice? O aunque no asocie imagenes a los campos de la base de datos aumenta en tamaño?
LibreOffice 5.3 en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Descargar imagenes de mi base de datos

Mensaje por Longi »

Hazle caso al jefe!, no es buena idea el guardar imágenes, no así las direcciones de éstas.
De todos modos, si ya la liaste, me parece que lo que quieres es sacar de la base de datos las imágenes, para tenerlas como objeto independiente, y que no sigan por siempre en las tablas de Base sin que ello tenga que suponer su eliminación y pérdida total puedes intentar el siguiente código, adaptando los nombres de los campos, por supuesto.
Te saca a una carpeta temporal en C un archivo con extensión .gif. La ruta la puedes variar hacia desktop, si es que quieres tenerlas en escritorio. Eso es tu elección:

Código: Seleccionar todo

Sub SacarImagen()
'-----------------------------------------------------------------------
	'4º Añadimos el logotipo, en este caso al tenerlo en la tabla de imágenes lo copiamos en un archivo temporal 
    'Adaptado de  DrewJensen
    
    Conn = ThisDatabaseDocument.CurrentController.ActiveConnection                    ' Tenemos activa la conexión con la base de datos
    oStat = conn.createStatement
    rs = oStat.executeQuery( "SELECT ""IMAGEN"", ""ID"",""NOMBRE"" FROM ""IMAGEN CORPORATIVA"" WHERE ""ID"" = 0" )' Aplicamos la consulta que solo tiene la imagen del logotipo
    if rs.isBeforeFirst then
    rs.next
    FileName = rs.getString( rs.FindColumn("NOMBRE"))                                 ' Recogemos el dato del campo "NOMBRE"
    BinStream = rs.getBinaryStream( rs.FindColumn("IMAGEN" ))                         ' Recogemos los datos del campo "IMAGEN"
    createUnoService("com.sun.star.ucb.SimpleFileAccess").writeFile( ConvertToURL( "c:\temp\" & FileName & ".gif" ), BinStream )
    end if                                                      ' Escribimos los datos en un archivo temporal en "c:\temp\LOGOTIPO"
End Sub
Como ves no es solo copiar y pegar o similar, al menos en esto que adapté de alguien que sabe bastante.
Recuerda que si te ha servido debes marcar el hilo como resuelto.

Un saludo y feliz año nuevo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

Re: Descargar imagenes de mi base de datos

Mensaje por keybol »

Longi escribió:Hazle caso al jefe!, no es buena idea el guardar imágenes, no así las direcciones de éstas.
De todos modos, si ya la liaste, me parece que lo que quieres es sacar de la base de datos las imágenes, para tenerlas como objeto independiente, y que no sigan por siempre en las tablas de Base sin que ello tenga que suponer su eliminación y pérdida total puedes intentar el siguiente código, adaptando los nombres de los campos, por supuesto.
Te saca a una carpeta temporal en C un archivo con extensión .gif. La ruta la puedes variar hacia desktop, si es que quieres tenerlas en escritorio. Eso es tu elección:

Código: Seleccionar todo

Sub SacarImagen()
'-----------------------------------------------------------------------
	'4º Añadimos el logotipo, en este caso al tenerlo en la tabla de imágenes lo copiamos en un archivo temporal 
    'Adaptado de  DrewJensen
    
    Conn = ThisDatabaseDocument.CurrentController.ActiveConnection                    ' Tenemos activa la conexión con la base de datos
    oStat = conn.createStatement
    rs = oStat.executeQuery( "SELECT ""IMAGEN"", ""ID"",""NOMBRE"" FROM ""IMAGEN CORPORATIVA"" WHERE ""ID"" = 0" )' Aplicamos la consulta que solo tiene la imagen del logotipo
    if rs.isBeforeFirst then
    rs.next
    FileName = rs.getString( rs.FindColumn("NOMBRE"))                                 ' Recogemos el dato del campo "NOMBRE"
    BinStream = rs.getBinaryStream( rs.FindColumn("IMAGEN" ))                         ' Recogemos los datos del campo "IMAGEN"
    createUnoService("com.sun.star.ucb.SimpleFileAccess").writeFile( ConvertToURL( "c:\temp\" & FileName & ".gif" ), BinStream )
    end if                                                      ' Escribimos los datos en un archivo temporal en "c:\temp\LOGOTIPO"
End Sub
Como ves no es solo copiar y pegar o similar, al menos en esto que adapté de alguien que sabe bastante.
Recuerda que si te ha servido debes marcar el hilo como resuelto.

Un saludo y feliz año nuevo!

Muchas gracias por el codigo, con esto podria sacar las imagenes del campo cuando quisiera?

Lo que ocurre es que estas imagenes se encuentran en una carpeta compartida, si se cambia la ruta de esa carpeta o la letra de esa carpeta no me serviria, aparte me convendria el poder abrir la base en mi casa y poder seguir viendo las imagenes, de ahi que si pierdo alguna de la carpeta compartida miraria como poder descargarmela de la base, la cosa es que el volumen aumentara pero aumentará mucho? o solo aumentara como tantas imagenes meta en ella?

Muchas gracias y feliz año nuevoo
LibreOffice 5.3 en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Descargar imagenes de mi base de datos

Mensaje por Longi »

Buenas!
Menos entusiasmo......
Primero habría que ver si lo que he escrito funciona en tu caso (espero que sí, pero está pendiente de pruebas)
Tienes que tener en cuenta que cada campo de tipo, digamos, normal (texto, número, fecha) ocupa unos pocos bytes, con lo que almacenar muchos registros, con varios campos cada registro, hace que el tamaño de la base de datos se incremente de a poquitos. Si el campo utilizado es para texto largo (LONGVARCHAR - MEMO en ACCESS) ya se empiezan a aumentar los tamaños donde los poquitos son algo más grandes.
Cuando lo haces con imágenes, los poquitos son enormes. Así que sí, cada foto que metas aumentas el tamaño de la base considerablemente, y ello le pone al motor que tiene Base por defecto (HSQLDB) en un aprieto, aunque también al propio sistema de funcionamiento de base (cada vez que se cierra se comprime y cada vez que se abre se descomprime, y en ese proceso hay bastantes fallos que termina dándote una pérdida de datos, lo cual parece que no es muy deseable).
Por todo lo anterior, aunque se pueden hacer más disquisiciones, no es conveniente el uso intensivo de Base como un archivo de imágenes.
El truco que te puse es para manejar un logotipo, con escaso peso como imagen, o algunas imágenes tipo, pero no para ir almacenando cada cosa que se nos ocurra.
Si buscas en el foro encontrarás ejemplos de cómo se pueden gestionar las imágenes, manteniendo la base de datos y la carpeta de imágenes en la misma carpeta. Recuerdo que hay un ejemplo (creo que de RGM) sobre cómo hacer informes con imágenes. Seguro que te es de utilidad.

Mira lo siguiente:
http://blog.open-office.es/base/utiliza ... ffice-base
https://forum.openoffice.org/es/forum/v ... nes#p18148

Nos vemos! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

Re: Descargar imagenes de mi base de datos

Mensaje por keybol »

Longi escribió:Buenas!
Menos entusiasmo......
Primero habría que ver si lo que he escrito funciona en tu caso (espero que sí, pero está pendiente de pruebas)
Tienes que tener en cuenta que cada campo de tipo, digamos, normal (texto, número, fecha) ocupa unos pocos bytes, con lo que almacenar muchos registros, con varios campos cada registro, hace que el tamaño de la base de datos se incremente de a poquitos. Si el campo utilizado es para texto largo (LONGVARCHAR - MEMO en ACCESS) ya se empiezan a aumentar los tamaños donde los poquitos son algo más grandes.
Cuando lo haces con imágenes, los poquitos son enormes. Así que sí, cada foto que metas aumentas el tamaño de la base considerablemente, y ello le pone al motor que tiene Base por defecto (HSQLDB) en un aprieto, aunque también al propio sistema de funcionamiento de base (cada vez que se cierra se comprime y cada vez que se abre se descomprime, y en ese proceso hay bastantes fallos que termina dándote una pérdida de datos, lo cual parece que no es muy deseable).
Por todo lo anterior, aunque se pueden hacer más disquisiciones, no es conveniente el uso intensivo de Base como un archivo de imágenes.
El truco que te puse es para manejar un logotipo, con escaso peso como imagen, o algunas imágenes tipo, pero no para ir almacenando cada cosa que se nos ocurra.
Si buscas en el foro encontrarás ejemplos de cómo se pueden gestionar las imágenes, manteniendo la base de datos y la carpeta de imágenes en la misma carpeta. Recuerdo que hay un ejemplo (creo que de RGM) sobre cómo hacer informes con imágenes. Seguro que te es de utilidad.

Mira lo siguiente:
http://blog.open-office.es/base/utiliza ... ffice-base
https://forum.openoffice.org/es/forum/v ... nes#p18148

Nos vemos! ;)
Una cosilla que me falla como concepto base, el campo de imagen en el que meto la misma guarda la imagen en si o solo la ruta de la misma, ya que si me llevo la base de un equipo a otro completamente distinto como puede ser el de mi casa, las imagenes las sigo viendo, puede ser que la guarde en la caché pero no estoy seguro, el campo es el de imagen LONGVARBINARY del propio libreoffice

Gracias por la ayuda :D
LibreOffice 5.3 en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Descargar imagenes de mi base de datos

Mensaje por Longi »

No estoy muy ducho en este asunto, pero lo normal es que si te llevas la base de datos a casa, sin ningún archivo más con ella, lo debes tener en la base de datos (sobre todo si el campo es LONGVARBINARY ).
Las otras dos posibilidades son :
-1: Que en vez de llevarte la base de datos, te lleves una carpeta, en la que hay un archivo de base de datos y una subcarpeta con todas las fotos, y lo que tengas almacenado en la tabla sean las rutas de acceso a cada imagen.
-2: Que si no están las fotos dentro del archivo de base y no hay carpeta accesoria, entonces haya una ruta que apunte a la imagen almacenada en Internet.
Podemos intentar profundizar en el tema, pero eso supone tener que ponerse al día, lo cual, en mi caso, lleva bastante tiempo.

Otro saludo! :?
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

Re: Descargar imagenes de mi base de datos

Mensaje por keybol »

Longi escribió:No estoy muy ducho en este asunto, pero lo normal es que si te llevas la base de datos a casa, sin ningún archivo más con ella, lo debes tener en la base de datos (sobre todo si el campo es LONGVARBINARY ).
Las otras dos posibilidades son :
-1: Que en vez de llevarte la base de datos, te lleves una carpeta, en la que hay un archivo de base de datos y una subcarpeta con todas las fotos, y lo que tengas almacenado en la tabla sean las rutas de acceso a cada imagen.
-2: Que si no están las fotos dentro del archivo de base y no hay carpeta accesoria, entonces haya una ruta que apunte a la imagen almacenada en Internet.
Podemos intentar profundizar en el tema, pero eso supone tener que ponerse al día, lo cual, en mi caso, lleva bastante tiempo.

Otro saludo! :?
Ya se lo que quieres decir pero nada no me merece la pena, la imagen solo esta ahi como comprobante por si se pierde la copia del original pero no me merece la pena
La cosilla es, el tamaño seria muy muy elevado? Por ejemplo 2 fotos por registro y tener unos 400 almacenados, son .jpg de
pdfs

Gracias
LibreOffice 5.3 en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Descargar imagenes de mi base de datos

Mensaje por Longi »

Me parece que 800 imágenes sería una locura, pero solo me lo parece.
Hay un método infalible y muy antiguo para determinar si es buen sistema o no: 'Método de ensayo y error'.
Considero que la base ha de quedar muy inestable, y que puedes perder datos o la base entera, y aunque hay modos de estabilizarla, eso supera lo planteado en este hilo, y creo que el problema de base no se superaría.
Hay otros motores de bases de datos más potentes (postgres), pero no tengo ni idea de su manejo, aunque si que se puede poner Base como interfaz.
En definitiva, 800 imágenes yo no las pondría.

Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

Re: Descargar imagenes de mi base de datos

Mensaje por keybol »

Longi escribió:Me parece que 800 imágenes sería una locura, pero solo me lo parece.
Hay un método infalible y muy antiguo para determinar si es buen sistema o no: 'Método de ensayo y error'.
Considero que la base ha de quedar muy inestable, y que puedes perder datos o la base entera, y aunque hay modos de estabilizarla, eso supera lo planteado en este hilo, y creo que el problema de base no se superaría.
Hay otros motores de bases de datos más potentes (postgres), pero no tengo ni idea de su manejo, aunque si que se puede poner Base como interfaz.
En definitiva, 800 imágenes yo no las pondría.

Un saludo!
Y si redujese el tamaño a unas 500 imágenes? o aun así hay riesgo de perdida de datos?

Gracias y feliz año a todos
LibreOffice 5.3 en Windows 10
mriosv
Mensajes: 2334
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Descargar imagenes de mi base de datos

Mensaje por mriosv »

Seguramente lo mejor sería reducir el peso de las imagenes, probablemente para lo que lo usas jpg con 50 Kb sería mas que suficiente y reduciría drásticamente el tamaño de la base.
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
keybol
Mensajes: 26
Registrado: Mar Dic 19, 2017 10:10 pm

Re: Descargar imagenes de mi base de datos

Mensaje por keybol »

Perfecto, asi lo haré pues, no obstante si mi base de datos libreoffice llegara a pesar mucho por culpa de estas imagenes eliminando la tabla de imagenes podria recuperar la informacion en caso de error

Gracias
LibreOffice 5.3 en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Descargar imagenes de mi base de datos

Mensaje por Longi »

Ten cuidado, y haz copias de seguridad cada poco o activa, como se ha comentado en no pocas ocasiones en el foro, dicha opción.
Cuando se corrompe la base no suele ser solo una tabla, y en no pocas ocasiones queda irrecuperable.
Perdona que sea tan cenizo.
Aunque no tiene nada que ver con el tema de las imágenes, si con el tema de la estabilidad, puedes echar un vistazo a este hilo, que es recientito:

https://forum.openoffice.org/es/forum/v ... 31&t=13369

En un principio parece que eso, que no tiene nada que ver con el tema de la estabilidad, pero si decides cambiar hacia una base que podríamos llamar partida, entonces seguramente (no tengo experiencia en imágenes), si que puedas manejar las cosas como quieras sin alto riesgo de rotura de la base de datos.

Otro saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Responder