Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 12-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues además, ese argumento invalida todos los blobs, no sólo las imágenes.

// Saludos
Responder Con Cita
  #22  
Antiguo 12-09-2012
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Pues además, ese argumento invalida todos los blobs, no sólo las imágenes.

// Saludos
Me refería a casos donde:

1) La cantidad de archivos a incluir en la base de datos sea muy grande (no hablo de decenas, sino de muchos miles por mes).

2) Los archivos sean de gran tamaño.

En esos dos casos me plantearía si realmente tiene sentido almacenarlos directamente dentro de un campo blob. Igual, insisto, es que soy un poco (¿ un poco ? ) paranoico con eso de la pérdida de datos, los riesgos, las copias de seguridad y todo eso.

Respondiendo a Casimiro: si bien no me dedico profesionalmente al desarrollo de software (es una actividad secundaria que tengo), las bases de datos que he usado son Firebird y SQLite.

Sobre las rubias, morochas o pelirrojas...al ritmo con que avanza todo (ver las funciones de reconocimiento de rostros que traen sitios como Google o Facebook...o muchas cámaras digitales) dentro de poco el estándar ANSI SQL incorporará cosas como:

Select Nombre, Edad, Estado_Civil, Foto From Empleados Where Foto = (Morochas Or Pelirrojas)

Será la era en que CUPIDO use una base de datos SQL para sus "trabajos".
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 12-09-2012 a las 17:16:59.
Responder Con Cita
  #23  
Antiguo 12-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por rretamar Ver Mensaje
Select Nombre, Edad, Estado_Civil, Foto From Empleados Where Foto = (Morochas Or Pelirrojas)
Sería mejor así:

Código SQL [-]
Select Nombre, Edad, Estado_Civil, Foto From Empleados Where Foto like :foto

Y proveemos la foto similar a la que queremos encontrar. O, ya por lo menos:

Código SQL [-]
Select Nombre, Edad, Estado_Civil, Foto From Empleados Where Foto between :menor_expectativa and :mayorexpectativa



// Saludos
Responder Con Cita
  #24  
Antiguo 13-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Si es correcto, si lo pones en otra base de datos y se perdieran los blob, por lo menos el resto de los datos quedarian intactos, aunque tambien ha habido corrupcion de datos en firebird.

De todas formas, nose porque no hay un componente para leer pdf en lazarus. Segun habeis dicho en otros post, de excel es complicado que lo hubiera porque excel es privativo, pero esta libreoffice que tambien los lee, pdf seria privativo porqque es de acrobat, pero linux tambien tiene okular por ejemplo.

De ahi, siendo un componente que se suele usar, el pdf, y el excel (de excel si hay pero reducido), no lo haya para lazarus, teniendo en cuenta que hay bastantes componentes, lease el codetyphon que trae muchos.

lo del tprocess y el shellexecute los tengo que ver a fondo porque de momento no me entero muy bien como paso un pdf a un stream y de ahi a un blob y viceversa, pero seguire intentando.

Saludos
Responder Con Cita
  #25  
Antiguo 13-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ahora sí que no he entendido, ¿estás buscando un componente para leer archivos pdf?
Responder Con Cita
  #26  
Antiguo 13-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Cita:
Empezado por anubis Ver Mensaje
Si es correcto, si lo pones en otra base de datos y se perdieran los blob, por lo menos el resto de los datos quedarian intactos, aunque tambien ha habido corrupcion de datos en firebird.

De todas formas, nose porque no hay un componente para leer pdf en lazarus. Segun habeis dicho en otros post, de excel es complicado que lo hubiera porque excel es privativo, pero esta libreoffice que tambien los lee, pdf seria privativo porqque es de acrobat, pero linux tambien tiene okular por ejemplo.

De ahi, siendo un componente que se suele usar, el pdf, y el excel (de excel si hay pero reducido), no lo haya para lazarus, teniendo en cuenta que hay bastantes componentes, lease el codetyphon que trae muchos.

lo del tprocess y el shellexecute los tengo que ver a fondo porque de momento no me entero muy bien como paso un pdf a un stream y de ahi a un blob y viceversa, pero seguire intentando.

Saludos
Pos de excel si hay y se llama TSpreadsheet, para leer archivos de pdf no conozco.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #27  
Antiguo 13-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Casimiro, lo que propones puede ser una solucion, pero si existiera un componente como el timage para hacer lo mismo con los pdf estaria bien, pero no lo hay, el shellexecute y el tprocess todavia los estoy digeriendo , porque todavia no veo como abrir y pasar lo que he abierto (dentro de un tprocess o shellexecute, que todavia esta complicado) a un stream y de ahi guardarlo (el stream ya lo uso con las imagenes).

mightydragonlor, si, ese componente lo he usado, pero esta muy limitado, por ejemplo, combinar celdas no se puede, y determinadas fórmulas tampoco.
Responder Con Cita
  #28  
Antiguo 13-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Esto abre la imagen con el programa que tenga asociado windows para hacerlo:

Código Delphi [-]
ShellExecute(0, 'open', 'c:\Windows\System32\rundll32.exe', 'c:\Windows\System32\shimgvw.dll,ImageView_Fullscreen c:\imagen.jpg', nil, SW_NORMAL);

Antes tienes que guardar la imagen en disco, claro.
Responder Con Cita
  #29  
Antiguo 13-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias casimiro por perder un poco de tu tiempo .

Creo ver por donde vas.
Si entendí bien con los campos blob, pueden contener cualquier cosa, en este caso, imagenes, pero los guarda en formato binario, y ya es cuestion de encontrar el componente que sea capaz de leerlos, en este caso timage.

Eso funciona bien, pero veo que en el caso del shellexecute, necesitas a fuerza una ruta y un nombre de archivo, cosa que en el blob no tengo.

si es asi verdad?
Responder Con Cita
  #30  
Antiguo 13-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por anubis Ver Mensaje
Gracias casimiro por perder un poco de tu tiempo .
Creo ver por donde vas.
Si entendí bien con los campos blob, pueden contener cualquier cosa, en este caso, imagenes, pero los guarda en formato binario, y ya es cuestion de encontrar el componente que sea capaz de leerlos, en este caso timage.
Eso funciona bien, pero veo que en el caso del shellexecute, necesitas a fuerza una ruta y un nombre de archivo, cosa que en el blob no tengo.
si es asi verdad?
Claro, un campo BLOB almacena lo que quieras.
Cuando se tiene un campo de ese tipo en el que se almacena "cualquier cosa" entonces es necesario tener otro campo que diga qué es, para poder guardarlo en disco y luego abrirlo, ejemplo:

Código SQL [-]
create table tbAlmacen (
  id integer not null,
  descripcion varchar(64),
  tipo varchar(16),
  contenido blob sub_type 0,
  primary key (id)
)
Y el contenido sería algo así:

Código:
1___Tutorial instalación Ubuntu___PDF___%$·/"%&%"%$·"%"··$
2___Foto de nubes_________________PNG___(&/$&$%&$·%$·"%$
3___Listado precios de NAS________TXT___Listado de precios de
4___Foto de moto__________________JPG___(/(//%&·&%$&%"·$
Así puedes extraer el que te interese a un directorio temporal, le pones un nombre temporal y la extensión que has guardado a la hora de crearlo (lo extraes del propio nombre del archivo cuando lo guardaste) y después lo abres como se ha indicado anteriormente.
Responder Con Cita
  #31  
Antiguo 21-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Hola de nuevo,

Estaba probando lo que me Casimiro comentaba pero no me sale,
Código Delphi [-]
VAR
  STREAM:TSTREAM;
  A:TFILESTREAM;
begin
  Stream := ZQuery1.CreateBlobStream(zquery1.FieldByName('facturA'), bmREAD); // Asignamos el BLOB a un stream
STREAM.Position:=0;                         

  A:=TFILESTREAM.Create('D:\PADILLA.JPG',fmCreate);
   A.CopyFrom(STREAM,STREAM.Size);

No se si va por ahi, el pasar el archivo a un directorio temporal, o hay otra forma de hacerlo.

saludos y gracias
Responder Con Cita
  #32  
Antiguo 21-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que no tienes que crear ningún stream, del campo blob lo guardas directamente en el disco, para eso guardamos el tipo de fichero que es.
Código Delphi [-]
undataset.campoblob.savetofile('loquesea.xxx');
Responder Con Cita
  #33  
Antiguo 21-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
si, gracias, tienes razon se podria hacer asi pero intento hacer esto:

Código Delphi [-]
zquery1.FieldByName('factura')
pero no me deja ponerle asblob ni savetofile.

Seguramente sera una tonteria
Responder Con Cita
  #34  
Antiguo 21-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por anubis Ver Mensaje
si, gracias, tienes razon se podria hacer asi
¿Pero así te funciona?
Responder Con Cita
  #35  
Antiguo 21-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Mas que nada porque no me deja poner mas porque no lo hay, nose cual es la instruccion para que haga l oque me dices.

gracias de nuevo
Responder Con Cita
  #36  
Antiguo 21-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
lo que dice casimiro no es un método de un FieldbyName('xxxxx').AsBlob, sino mas bien que al crear el DataSet, donde especifica que campo y que tipo de dato es, un TField si no estoy mal, pero esto no serviría para Dataset´s creados en tiempo de ejecución.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #37  
Antiguo 22-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Buenas amigos,

Aplicando vuestros sabios consejos al final he conseguido algo de lo que pretendía, sacar una imagen de un blob y guardarlo en un archivo para poder visualizarlo externamente.
Lo saqué de otro post.
Código Delphi [-]
 PROCEDURE TFORM1.LEERBLOB;
 VAR
   BLOB:TSTREAM;
   BEGIN
     blob := zquery1.CreateBlobStream(zquery1.FieldByName('factura'), bmRead);
   try
    blob.Seek(0, soFromBeginning);
    with TFileStream.Create('PRUEBA.jpg', fmCreate) do
      try
        CopyFrom(blob, blob.Size)
      finally
        Free
      end;
  finally
    blob.Free
   end;
  ShellExecute(0, 'open', PChar('prueba.jpg'), Nil,Nil, SW_SHOWNORMAL);
  END;

En este caso, tenia almancenadas solo imagenes jpg, pero cambiando un poco las cosas posteriormente, podre meter finalmente los pdf o lo que sea (tal como decia casimiro, gracias).

El método que comentabais de no usar intermediarios sino guardarlo directamente no he sido capaz de realizarlo, pero este sirve.

Me falta ahora implementarlo al reves, que no tiene que ser dificil

La última cuestión es relacionado con el shellexecute, funcionar funciona estupendamente, aunque me gustaba más el tprocess, tal y como he visto, pero le falla 1 punto:

- Se necesita un ejecutable a fuerza (si, opendocument funciona pero no es ni mas ni menos que un shellexecute).

Y la ventaja que si he visto es que si abres el archivo con tprocess, hasta que no cierras la aplicacion externa no vuelves a tu programa.

Entonces, de que otra forma se le puede decir a tprocess que abra un archivo, por ejemplo, un pdf, con el programa determinado en la máquina que lo estas corriendo.

saludos y gracias
Responder Con Cita
  #38  
Antiguo 22-09-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
Puedes guardar lo que sea en un BLOB, pero MOSTRARLO como lo que es, en una aplicacion, solo lo podras hacer si tienes el driver especifico para el caso.

El asunto es que hay infinidad de formatos de archivos, y algunos no son necesariamente abiertos, o standard, al grado de que solo se abren, en lo practico, con su aplicacion, o aplicaciones, para el caso.

Para PDF necesitas controles de Adobe, que son gratuitos.

Una columna para todo tipo de BLOBS, por ejemplo, lo mas probable es que no sea algo muy practico. En mi opinion, tendria que estar muy justificado, por cuestiones practicas.

Una de esas cuestiones podria ser la magnitud de la data, aparte de el poder "mostrar" o USAR el BLOB directo de la aplicacion.

Mi uso de BLOBS se limita a imagenes, y como hay muchos formatos, he decidido limitar a JPEG y .bmp, por ejemplo (maximo dos TIPOS de blobs en una misma columna), con codigo para filtrar el almacenamiento, y codigo para descifrar el tipo y mostrarlas en la aplicacion. Y aun asi, lo practico es que las imagenes no sean de mucha resolucion, para que el tamaño del BLOB no afecte la fluidez del uso de ellos.

Si tu interes es en PDF, es recomedable que te aboques a resolver ESE caso en especifico, antes que tratar de generalizar.
Responder Con Cita
  #39  
Antiguo 22-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En un BLOB puedes guardar lo que quieras, sin ningún problema, es simplemente una "cadena" de caracteres. Da igual si es una imagen, un pdf, un video, un texto, un mp3, un ejecutable, una base de datos completa, etc. cualquier cosa. La base de datos no va a hacer ningún tipo de control sobre lo que se guarda, le da igual.
Si se extrae lo almacenado en un campo blob y se guarda en disco, si intentamos abrirlo entonces el sistema operativo usará el programa que tenga predeterminado para el mismo, si lo tiene, y en caso contrario dirá que no puede abrirlo. No es ningún problema.
En mi extrabajo tenemos un módulo de seguimientos (para clientes/proveedores/artículos/vendedores/documentos/etc.) donde se almacena "cualquier cosa", y puede ser luego visionada, extraída, impresa, reproducida, etc. según el tipo de fichero del que se trate.
Por ejemplo, en la ficha de proveedores, en su apartado "Seguimientos" se pueden almacenar sus documentos en formato pdf, fotos de los representantes de la empresa, una imagen escaneada de un periódico donde hablan sobre esa empresa y que conviene tenerlo a mano, etc. cualquier cosa que sirva para tener información sobre ese proveedor.
Para este caso en concreto se usa una base de datos externa donde se almacena todo lo concerniente a "Seguimientos", para no recargar la base de datos principal de la gestión comercial.
O sea, que no hay que "restringirse" a uno o dos formatos de imágenes o documentos pdf. Que si hace falta almacenar más cosas, se almacenan y no pasa nada.
También (y aquí volvemos al eterno debate) se puede almacenar en directorios externos con sus pros y sus contras, que creo que no es necesario recordar.

Lo de almacenarlo en una base de datos aparte es porque ya llegan a tamaños bastante considerables, deben rondar ya los 50 gigas de media. Y no es necesario estar haciendo backup todos los días de esa información.

Última edición por Casimiro Notevi fecha: 22-09-2012 a las 12:44:07.
Responder Con Cita
  #40  
Antiguo 22-09-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
Si, Casimiro, pero si para verlos hay que vaciar el Blob de la base de datos a un archivo temporal, y da casi lo mismo que tener ya los archivos originales en un folder, y almacenar en la base de datos solo la ubicacion del archivo.

De esa manera, la base de datos es mas ligera.

Lo unico es que la base de datos NO ES portatil. Pero si la base es fija, y los Blobs son grandes, pues en lo personal optaria por solo usar apuntadores a las ubicaciones.

Ademas no me es pausible que se guarde "todo tipo de Blobs", pues ya que Blobs pueden ser hasta peliculas, musica, etc, a la cual no le veo caso que se almacenen en base de datos, si no es que sea ESE el uso especifico.

Cada caso y uso, sin embargo, se debe de basar en lo que mas conviene.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cual es la mejor forma de conectar con la BD GerTorresM Conexión con bases de datos 1 11-01-2010 16:51:47
Sobre cuál es la mejor opción para trabajar con Word Gabo Servers 6 16-01-2008 13:36:21
Eliminar Codigo Cual es la mejor Forma ? sierraja Varios 1 12-04-2007 00:41:00
cual es la mejor forma de logearse a mysql... Arturo MySQL 1 11-10-2006 17:45:01
cual es la mejor forma ? martita Varios 14 07-07-2005 19:35:55


La franja horaria es GMT +2. Ahora son las 04:34:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi