Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Guardar y Leer fotos directamente a una base de datos sin antes guardar como archivo (https://www.clubdelphi.com/foros/showthread.php?t=92002)

rmeckbell 24-06-2017 00:06:23

Guardar sin ponerle nombre al archivo
 
Hola estaba buscando en el foro un tema relacionado con campos tipo blob para guardar imágenes en una base de datos,,
y el articulo me ha sido de gran ayuda sin embargo lo que ocupo es guardar una foto que es tomada directamente del celular con mi aplicación,es decir no tengo un archivo tipo imágen lo que tengo es una imagen en memoria desde mi aplicación, pero como hago para indicar el tipo de imagen y ponerle nombre al archivo para guardar directamente en el campo BLOB del la base de datos sin necesidad de crear un archivo físico en el celular..la aplicación se conecta a una base de datos externa tipo Interbase.

Saludos

dec 24-06-2017 18:31:08

Hola,

Cita:

Empezado por rmeckbell (Mensaje 518667)
Hola estaba buscando en el foro un tema relacionado con campos tipo blob para guardar imágenes en una base de datos,,
y el articulo me ha sido de gran ayuda sin embargo lo que ocupo es guardar una foto que es tomada directamente del celular con mi aplicación,es decir no tengo un archivo tipo imágen lo que tengo es una imagen en memoria desde mi aplicación, pero como hago para indicar el tipo de imagen y ponerle nombre al archivo para guardar directamente en el campo BLOB del la base de datos sin necesidad de crear un archivo físico en el celular..la aplicación se conecta a una base de datos externa tipo Interbase.

Saludos

¿Cómo estás tomando la foto? ¿Obtienes directamente un "stream"? ¿No se guarda antes la foto en algún lado (aunque sea temporal) y puedes obtener la ruta del archivo? En el primer caso, que obtengas sólo un stream, creo tendrías que buscar información (en este foro se ha tratado alguna vez) sobre cómo averiguar el tipo de imagen desde un "stream". De este modo podrías conocer el tipo de imagen de que se trate y actuar en consecuencia. En el segundo caso, lo que se guarda es acaso una archivo temporal, y, en base a su extensión, podrías ya obtener acaso información suficiente. También es posible que el componente que uses para tomar la foto cuente con algunas opciones que puedan resultar útiles.

rmeckbell 24-06-2017 21:57:20

Guardar y Leer fotos directamente a una base de datos sin antes guardar como archivo
 
Hola...

Si alguien me puede ayudar con el siguiente tema, el asunto es que desarrolle una aplicación para Android donde trato de guardar una imagen a una base de datos y a su vez luego recuperar la imagen y mostrarla en un objeto TImage..el tema es que guadar y abrir imágenes desde un archivo si lo logro hacer,, sin embargo con una base de datos se me complica, pues he buscado en varios foros y los ejemplo que dan es cargar la imagen desde un archivo y luego guardarla a la base de datos, pero lo que ocupo es que la imagen tomada directamente desde mi aplicación en el celular, la pueda guardar directamente al campo Blob en la base de datos Interbase en un servidor externo, el problema que tengo no es la conexion con la base de datos sino el poder guardar la imagen en memoria directamente al campo imagen en la base de datos.

Estos son los procedimientos que desarrolle, les agradecerìa cualquier tipo de ayuda.
Código Delphi [-]
procedure TAccessCameraAppForm.Button1Click(Sender: TObject);
  //recuperar imagen
  var  Stream: TStream;

  begin

 fdquery1.Close;
 fdquery1.SQL.Clear;
 fdquery1.SQL.add('select Imagen from Casos where codigo = :code');
 fdquery1.ParamByName('code').AsInteger:= 1;
 fdquery1.open;
 Stream := TMemoryStream.Create;
 Stream := fdquery1.CreateBlobStream(fdquery1.FieldByName('Imagen'), bmRead);
 fdquery1.Close;

  imgcameraImage.Bitmap.LoadFromStream(Stream);  //se indica un error en el bitmap que se carga
  //desde la base de datos

 Stream.Free;                 // liberamos...

 end;

procedure TAccessCameraAppForm.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
      //guardar imagen
var picturename,ruta:string;
        SaveParams: TBitmapCodecSaveParams;
        vstream:TStream;
         codigo:integer;
begin



  { Assign the image retrieved from the Camera to the TImage component. }
  imgCameraImage.Bitmap.Assign(Image);
 vstream :=TMemoryStream.Create;


 imgcameraImage.Bitmap.SaveToStream(VStream);


 fdquery1.Close;
 fdquery1.SQL.Clear;
 fdquery1.SQL.add('select max(codigo) from Casos');
 fdquery1.open;
 codigo := fdquery1.Fields.Fields[0].Value+1;

 fdquery1.Close;
 fdquery1.SQL.Clear;
 fdquery1.SQL.Add('Insert Into Casos (Codigo,Nombre,Imagen) VALUES(:code,:name,:foto)');
 fdquery1.ParamByName('name').DataType := ftString;
 fdquery1.ParamByName('name').AsString:='Jorge';
 fdquery1.ParamByName('code').DataType := ftInteger;
 fdquery1.ParamByName('code').AsInteger:= codigo;
 fdquery1.ParamByName('foto').DataType := ftBlob;
  fdquery1.ParamByName('foto').LoadFromStream(vstream,ftBlob);
 fdquery1.ExecSQL;
 vstream.Free;
 fdquery1.Close;
  
  imgCameraImage.Free;

end;

Casimiro Notevi 25-06-2017 00:41:42

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)

No abras nuevos hilos para preguntar lo mismo.
Ni tampoco repitas hilos.
Y recuerda poner las etiquetas para el código fuente.

Poner los tags al código fuente, ejemplo:



Gracias :)

rmeckbell 26-06-2017 17:21:59

Hola Creo que tomaré la opciòn de crear un archivo temporar en formato jpg y luego proceder a guardarlo en la base de datos, ya que es un poco confuso conocer en memoria el tipo archivo..ya que solo tengo un stream.

Saludos

dec 26-06-2017 17:37:24

Hola a todos,

Cita:

Empezado por rmeckbell (Mensaje 518739)
Hola Creo que tomaré la opciòn de crear un archivo temporar en formato jpg y luego proceder a guardarlo en la base de datos, ya que es un poco confuso conocer en memoria el tipo archivo..ya que solo tengo un stream.

Saludos

Hasta donde yo llego, lo que tienes es un objeto "TBitmap"... de modo que ya sabes que se trata de un "Bitmap"... ¿o me equivoco? :confused:

rmeckbell 26-06-2017 18:24:20

Hola Dec, totalmente de acuerdo que el objeto es un bitmap, lo que no logro saber es como guardarlo sin pasar por un archivo fìsico en el disco e indicar File.bmp o File.jpg a eso me refiero con confuso. la soluciòn de guardarlo en la base de datos directamente desde memoria. Por eso creo que tomare la opciòn de crear un archivo temporal como indicaste en la primera respuesta.


La franja horaria es GMT +2. Ahora son las 16:33: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