Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   levantar un blob desde oracle (https://www.clubdelphi.com/foros/showthread.php?t=59185)

Daniel Muniz 16-08-2008 00:19:12

levantar un blob desde oracle
 
Hola:
Estoy teniendo un problema para poder levantar desde delphi un dato blob que esta almacenado en oracle (fotos).
Tengo una conexiion ADO y traigo el campo blob de oracle invocando a un procedimiento de la base con StoredProc, tengo un parametro de salida en este procedimiento que es del tipo blob en oracle y del mismo tipo defino mi parametro en delphi.
El procedimiento lo ejecuto sin problemas pero lugo no puedo cargar la imagen en un componente "Timage".
Cualquier tipo de datos en el que quiero cargar el parametro que me devuelve oracle no me deja, dice que es un variant y que no puedo pasar un variant a blob.
Pero yo lo defino como blob al parametro, no se porque lo trae como variant.

Bueno muchas gracias

poliburro 17-08-2008 21:17:25

Serías tan amable de indicarme la cadena de conexión que utilizas?

Así como mostrar la declaración de parámetros de tu sp y el bloque de creación de parámetros en ADOSp?


Saludos.

Daniel Muniz 18-08-2008 18:07:54

ok, gracias, te paso el codigo

sp1:=TADOStoredProc.Create(nil);
sp1.Connection:=ADOConnection1;
sp1.Parameters.CreateParameter('lectura',ftString,pdInput,250,'');
sp1.Parameters.ParambyName('lectura').value:=lecturafinal;
sp1.Parameters.CreateParameter('informacion',ftString,pdOutput,250,'');
sp1.Parameters.CreateParameter('info_tarjeta',ftstring,pdOutput,250,'');
sp1.Parameters.CreateParameter('error',ftstring,pdOutput,250,'');
sp1.Parameters.CreateParameter('foto',ftBlob,pdOutput,250000,'');
sp1.ExecProc; // Ejecuto el procedimiento
// Levantar la foto (foto_blob es una variable de tipo blob)
foto_blob:=sp1.Parameters.ParambyName('foto').value;
Image1.Picture.Assign(foto_blob);

El procedimiento ejecuta bien, y los demas parametros de salida que no son blob los capturo bien.
el tema es que el blob me lo devuelve como variant y no como blob, no se porque porque es definido blob por mi y en la base.
Ese codigo que te pase falla en al penultima linea porque dice que son incompatibles los tipos unos es TBlobField y el otro variant.
Si cargo en un variant el parametro despues no lo pudo poner en el Timage

Gracias
Daniel

poliburro 19-08-2008 12:53:59

Yo lo hago de la siguiente manera, espero te sirva

Código Delphi [-]
Var
   LmsImagen: TADOBlobStream;
Begin

If Not LdmDAtos.AdsDatos.Fields[26].IsNull Then
   Begin
       LmsImagen := TADOBlobStream.Create(TBlobField(AdsDatos.Fields[26]),bmRead);
                  LmsImagen.SaveToFile(ExtractFilePath(Application.ExeName) + 'foto.jpg');
                  ImgFoto.Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + 'foto.JPG')
End
Else
ImgFoto.Bitmap.LoadFromFile('sinfoto.JPG');
End;


La franja horaria es GMT +2. Ahora son las 15:43:55.

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