PDA

Ver la Versión Completa : Problema al cargar imagenes


pjmedina
22-11-2006, 13:54:57
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
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
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
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!!!