FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema extrayendo campo imagen de una tabla access
Hola, pues me estoy volviendo loco, creo que en el foro estaba la solucion pero no consigo encontrarla
Tengo que exportar datos de una tabla access, pero esta tiene un campo OLE en el que en teoria hay una imagen guardada, digo en teoria porque si abro la tabla con access en el campo me aparece MS Photo Editor 3, y cuando intento abrirla con doble click me tira un error "El Servidor OLE no esta registrado", esto será porque no tengo el Ms Photo Edito ese instalado... Bueno la cosa es que tengo que exportar los datos de esa tabla a interbase, con el resto de campos no hay problemas pero este es taco raro, si intento vizualizar la tabla con componentes de ado el TDBImage asignado a este campo me tira el error "Bitmap image is not valid", he leido sobre exportar este tipo de campos por ejemplo estos ejemplos http://delphi.about.com/od/database/l/aa030601d.htm, pero me da a mi que no es un jpg lo que hay guardado ahi dentro porque los ejemplos no sirven con este campo... alguna idea de como saber que tipo de imagen hay ahi almacenada y como extraerla ? Haberla haila porque en 300 registros se come 2 GB, asi que tiene que haber imagenes ahi dentro pero no encuentro la forma de sacarlas... EDITO Acabo de instalar el ms photo editor ese y si, dentro de ese campo hay una imagen.. como narices la saco ? Una ayuda por favor que estoy desesperado Última edición por JoysticK fecha: 28-07-2008 a las 01:02:16. |
#2
|
||||
|
||||
He enctontrado este texto, por lo que entiendo creo que tiene bastante coerencia:
Código:
ole embedding is terrible because of this: it's not embedded data in a known format, it's embedded data in whatever random proprietary format the software wanted to use, so you now have word docs and access databases which contain data which can't be read by any supported microsoft software. |
#3
|
||||
|
||||
Nada, no hay forma, lo tendré que dejar por imposible
|
#4
|
||||
|
||||
Bueno, espero no sea tarde, aqui como lo uso, es con "JPG", pero tal ves puedas adaptarlo a "BMP", si es que son de ese tipo.
|
#5
|
||||
|
||||
Numca es tarde si la dicha es buena jeje, pero nada tampoco me funciona tu codigo, cuando llega a la linea:
Código:
grafico.LoadFromStream(BS); Código:
JPEG ERROR #52 Código:
grafico:= TJPEGImage.Create; Código:
grafico:= TBitmap.Create; Código:
Bitmap image is not valid. |
#6
|
|||
|
|||
Código:
( TABLA.FindField( 'FOTO' ) As TBlobField).SaveToFile( sFileFOTO ); // grabo la foto imgFoto.Picture.LoadFromFile( sFileFOTO ); // muestro en un control image // Y Si quiero guardar una foto ( TABLA.FindField( 'FOTO' ) As TBlobField ).LoadFromFile( sFileFOTO ); sFileFOTO es la ruta y nombre del archivo donde quiero guardar Bueno espero te sirva, y no te rindas tan facilmente Walter |
#7
|
||||
|
||||
Gracias por los animos Walter, pero eso fue lo primero que probe a grabar el contenido del campo en un fichero, ese fichero, le ponga la extension que le ponga no es reconocido como una imagen, por lo que he leido es porque access guarda en la cabecera del campo donde se inserta la imagen datos como con que programa se abre (MS Photo Editor) la ruta y paranoias varias, corrompiemdo el fichero original...
Os subo un ejemplo de esta tabla, 1 REGISTRO, con 1 SOLO CAMPO, la imagen, a ver quien tiene narices de extraer esa imagen mediante codigo... http://rapidshare.com/files/13556256...campo.rar.html Lo mejor es que 1 Registro con 1 campo ocupa unos 25 MB.... bueno lo he comprimido con winrar ahora pesa 6 MB... como me gusta accesss.....
__________________
Borland Delphi XE2 // Interbase Server |
#8
|
|||
|
|||
Hola JoysticK
Es extraño el tamaño de la imagen compacto la BD y me reduce de 26 mb a 8 nose como lo guardas pero con las rutinas que te pasé funciona a la perfeccion con Access. Y cuando visualizo un registro me aparece el texto Datos Binarios Largos en los campos que son Objeto OLE. Y no así Imagen de MS Photoeditor 3 o lo que fuera que estes guardando ahí, o sea que no estas guardando una imagen pura sino con formato propio tipo .PSD de photoshop, ademas por el peso para ser jpg debería ser muy enorme la foto/imagen. Asi que deberias comenzar por cargar imagenes jpg o bmp sin formatos propios de una aplicación, o bien guardaste como jpg algo con otro formato ya que no es suficiente elegir la extension al guardar. A continuación te copio unas lineas que hago por si es bmp o jpg una imagen, se que hay maneras mas sencillas de hacerlo, pero en su momento fue lo que se me ocurrio. No es indistinto para el objeto image si es bmp o jpg pq genera una excepcion Código:
if not qryEMP.FieldByName( 'FOTO' ).IsNull then begin sTypeFOTO := Copy( AnsiString( qryEMP.FieldByName( 'FOTO' ).Value ), 1, 2 ); if sTypeFOTO = 'BM' then // Es BMP ? begin sFOTO := sMainFolder + 'IMGs\TEMP_' + IntToStr( iEmpleado ) + '.bmp'; end else begin sFOTO := sMainFolder + 'IMGs\TEMP_' + IntToStr( iEmpleado ) + '.jpg'; end end; imgFoto.Picture := nil; if FileExists( sFOTO ) then begin DeleteFile( PChar( sFOTO ) ); end; if not qryEMP.FieldByName( 'FOTO' ).IsNull then begin ( qryEMP.FindField( 'FOTO' ) As TBlobField).SaveToFile( sFOTO ); imgFoto.Picture.LoadFromFile( sFOTO ); end; |
#9
|
||||
|
||||
La cosa es que no se que como han guardado esos campos, lo que se seguro es que son imagenes, documentos escaneados a una resolucion bastante bestia por eso el peso, el problema es que no se exactamente como han metido esas imagenes en ese campo pues me han encargado importar esa base datos a interbase pero me encuentro con el problemita de la imagen de las narices..
¿ Has conseguido exportar la imagen de la base de datos que te he subido como ejemplo ? Es que yo no consigo guardar el contenido de ese campo a ningun fichero que despues me reconozca como una imagen con el Copy( AnsiString( qryEMP.FieldByName( 'FOTO' ).Value ), 1, 2 ), estas copiando los primeros 2 caracteres del string conetenedor de la foto no ? y miras si es BM o JPG, pero no estos campos no se como los han guardado, si abres el fichero exportado mediante campo.savetofile con un editor hexadecimal vas a ver que cosas mas raras tiene en al cabecera del fichero... Un ejemplo del comienzo de un fichero exportado mediante savetofile abierto con editor binario: Código:
; / ÿÿÿÿFotografía de Photo Editor MSPhotoEd.3 MSPhotoEd.3 8Y ÐÏࡱá > þÿ Z þÿÿÿ ! " # $ % & ' ( ) * + , - . / M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿL þÿÿÿþÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿýÿÿÿ1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ € R o o t E n t r y ÿÿÿÿÿÿÿÿ @9”Þ6Ï•> À¨@)é °(V¨^ðÈ @ O l e ÿÿÿÿÿÿÿÿÿÿÿÿ
__________________
Borland Delphi XE2 // Interbase Server |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Agregar campo en una tabla access desde delphi | Chogo | Tablas planas | 1 | 10-10-2007 21:22:42 |
Grabar Imagen en Tabla Access | novato03 | Conexión con bases de datos | 7 | 02-10-2007 23:49:02 |
Agregar Campo en Tabla Access | MaMu | Conexión con bases de datos | 2 | 25-05-2007 19:35:15 |
Modificar campo tabla access desde delphi | JuanHC | Conexión con bases de datos | 3 | 25-09-2006 13:15:02 |
Modificar campo de tabla en MS ACCESS | i_minex | Servers | 1 | 04-03-2005 09:05:15 |
|