Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema al cargar imagenes (https://www.clubdelphi.com/foros/showthread.php?t=37767)

pjmedina 22-11-2006 13:54:57

Problema al cargar imagenes
 
Buenas a tod@s,
he estado mirando en el foro pero no he visto nada que me pueda ayudar.

Tengo dos base de datos, una en firebird y la otra en access y tengo que traspasar cierta información de access a firebird.

Entre todos los campos se encuentra un campo llamado foto del tipo "OBJETO OLE" y tengo que meterlo en un tipo blob de firebird.

He probado varias opciones y no consigo que funcione. Estoy trabajando con Delphi 7. Me urge un monton, a ver si podeis echarme un cabla.


Muchas gracias a tod@s

Neftali [Germán.Estévez] 22-11-2006 13:59:56

¿Puedes explicar cómo estás haciendo el traspaso?
¿Estás programando en Delphi? ¿Estás usando herramientas externas?

pjmedina 22-11-2006 16:33:53

Código Delphi [-]
dcurso.First;
     while not(dcurso.Eof)do
     begin
       inc(codigo);
              dusuario.Insert;
       dusuario.FieldByName('codigo').Value:=codigo;
       if dcurso.fieldbyname('apellidos').isnull or dcurso.fieldbyname('nombre').isnull then
       dusuario.cancel
       else
       begin
       if not(dcurso.FieldByName('año').IsNull) then         
 dusuario.FieldByName('libre2').Value:=dcurso.fieldbyname('año').asstring;
       dusuario.FieldByName('num_matricula').value:=dcurso.fieldbyname('expte').AsString;       
//AQUI POR EJEMPLO TENDRIA K PONER K PASE LA FOTO SI LA TIENE
        if not(dcurso.FieldByName('fecha nac').IsNull) then  
       dusuario.fieldbyname('fecha_nacimiento').value:=dcurso.FieldByName('fecha nac').Value;       
dusuario.FieldByName('nombre_usuario').Value:=trim(dcurso.FieldByName('apellidos').Value+' '+dcurso.FieldByName('nombre').Value);
dusuario.FieldByName('nombre_completo').Value:=trim(dcurso.FieldByName('apellidos').Value+' '+dcurso.FieldByName('nombre').Value);
dusuario.FieldByName('poblacion').Value:=dcurso.FieldByName('población').Value;       
dusuario.FieldByName('direccion').Value:=dcurso.FieldByName('dirección').Value;      
dusuario.FieldByName('provincia').Value:=dcurso.FieldByName('provincia').Value;       
dusuario.FieldByName('codigo_postal').Value:=dcurso.FieldByName('cp').Value;       
dusuario.FieldByName('telefono').Value:=dcurso.FieldByName('teléfono1').Value;       
dusuario.FieldByName('telefono_2').Value:=dcurso.FieldByName('teléfono2').Value;       
if not(dcurso.FieldByName('nif').IsNull)then
dusuario.FieldByName('nif').Value:=QuitaCaracter(dcurso.fieldbyname('nif').Value);       
dusuario.FieldByName('comentario').Value:=dcurso.FieldByName('observaciones').Value;       
dusuario.FieldByName('libre1').Value:=dcurso.FieldByName('curso').Value;       
dusuario.Post;
        end;
       dcurso.Next;
            end;


Este es el fragmento de codigo principal para el traspaso de lo que quiero. Simpremente recorro todos los campos de la tabla origen (access)y los voy insertando en la tabla destinto (firebird).

El tema de la foto no lo he conseguido pasar.

luisgutierrezb 22-11-2006 23:36:02

busca en los metodos del campo blob, las funciones, loadfromstream y savetostream, en la ayuda de delphi

pjmedina 23-11-2006 10:51:05

Código Delphi [-]
 try       
       MS:=TMemoryStream.Create;       
       dcursofoto.SaveToStream(MS);// Access - OLE - Imagen de mapa de bit
       dusuarioimagen.SaveToStream(MS);//Firebird - Blob
     finally
       MS.Free;
    
 end;


¿Si pongo esto en cada insert debería de funcionar? No entiendo muy bien esto del stream ni del memorystream.

Siento ser pesado pero consigo echarlo a andar.

Ayudarme por favor ...


Gracias

Lepe 23-11-2006 14:29:00

Código Delphi [-]
 try       
       MS:=TMemoryStream.Create;       
       dcursofoto.SaveToStream(MS);// Access - OLE - Imagen de mapa de bit
       dusuarioimagen.LoadFromStream(MS);//Firebird - Blob CAMBIOOOOOOOOO
     finally
       MS.Free;
    
 end;

Un Stream es un "flujo de datos", una tubería desde un origen hacia un destino. También puede servir un Stream para almacenar algo, bien temporalmente o definitivamente.

Existen varios tipos de Stream:
- MemoryStream, crea un "almacén" en memoria RAM
- FileStream, crea un "almacén" en el disco duro.

Con ese código lo que se hace es:
- Crear un espacio en memoria (llamado MS) para poder guardar algo temporalmente; MS es un intermediario de la operación.
- Se accede a dcursofoto y se guarda el contenido (la foto que está en la BBDD) en el Stream de memoria.
- Desde dusuarioimagen se carga el contenido de MS (la foto).
- Por último se elimina de la memoria el "almacén", el MS.

La foto queda en dsusuarioimagen (sea lo que sea, un TImage, Un TStream, ...).
Saludos y espero te ayude a comprender mejor el Stream.

pjmedina 23-11-2006 16:22:48

Muchas gracias por la información. La verdad que me ha aclarado un monton.

He puesto lo que me has escrito, y el traspaso me lo hace. El problema está a la hora de mostrar la imagen que dice "La imagen Bitmap no es válida".

¿A qué se puede deber esto?



Perdonad por las molestias!!!


La franja horaria es GMT +2. Ahora son las 01:10:58.

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