Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Guardar un JPEG en un campo LongBlob (https://www.clubdelphi.com/foros/showthread.php?t=90075)

darkamerico 01-04-2016 15:30:31

Guardar un JPEG en un campo LongBlob
 
Saludos amigos, estoy realizando una aplicación donde uso un TUniQuery para mostrar los detalles de una persona, hay un campo llamado foto (LongBlob) que debe mostrar la foto de la persona y hay un boton debajo de la imagen que debe insertar una imagen en ese registro. El proceso
lo muestro en las siguientes imagenes:

1. Busqueda de la Persona:


2. Detalle de la Persona en la Ficha:


Mi problema radica en el botón Cargar Imagen, pues tiene la mision de insertar una imagen (JPEG) hacia la BD.

La estructura de la tabla:



Cuando hago click en la grilla del Paso 1, recupero el ID de la persona y lo coloco en una variable dentro del Formulario en el evento OnCellClick() de la grilla:

idPersSelecc:=gridResBusca.DataSource.DataSet.Fields[0].AsInteger;

Agradezco su ayuda amigos

Casimiro Notevi 01-04-2016 16:28:05

Mira algunos de los mensajes del final de página, abajo del todo.
También puedes hacer una búsqueda, es un tema que se ha tratado infinidad de veces.
Avisa si no encuentras la solución.

darkamerico 01-04-2016 16:32:02

Saludos
 
Cita:

Empezado por Casimiro Notevi (Mensaje 503955)
Mira algunos de los mensajes del final de página, abajo del todo.
También puedes hacer una búsqueda, es un tema que se ha tratado infinidad de veces.
Avisa si no encuentras la solución.

Efectivamente, se ha tratado muchas veces pero usando componentes TTable, lo que tengo en este programa es un TQuery, lo que estoy requiriendo es un codigo que me recoja un archivo JPEG del disco duro y lo inserte directamente en el registro con el idPersSelecc de la variable.

Casimiro Notevi 01-04-2016 16:36:07

Bien, por eso te he comentado esto:
Cita:

Empezado por Casimiro Notevi (Mensaje 503955)
Mira algunos de los mensajes del final de página, abajo del todo.
También puedes hacer una búsqueda, es un tema que se ha tratado infinidad de veces.
Avisa si no encuentras la solución.


AgustinOrtu 01-04-2016 16:38:51

No importa el componente, a fin de cuentas siempre operas con TField; en este caso la clase especializada TBlobField

Ejemplo

En este enlace hay un ejemplo de ecfisa y tambien he subido una unidad con un metodo que le pasas un campo blob y lo vuelca en un TImage

Saludos

fredo 02-04-2016 17:23:20

EL CAMPO DBiMAGE SOLO SOPERTA bmp, ¿por que? aun no tengo idea.... deviera soportar minimo png y jpg, pero bueno ya que no es el caso yo hici este codigo para usar jpg.

para evento afterscroll de ti query

Código Delphi [-]
var
  JpegImage: TJPEGImage;
  BlobStream: TStream;
begin
//     FDQImagenes contiene las imagenes en memoria y ya esta activa con solo los productos que tiene  imagen en JPG//
//     FDQProductosVentas contiene la ficha del producto completa

     FDQImagenesProductos.Close;
     FDQImagenesProductos.ParamByName('codigo').asInteger :=FDQProductosVentascodigo.AsInteger;
     FDQImagenesProductos.Open;

     if FDQImagenesProductoscodigo.AsString <> '' then
     Begin
        if not FDQImagenesProductosimagen.IsNull then
        Begin
          try
            BlobStream := FDQImagenes.CreateBlobStream(FDQImagenesProductos.FieldByName('imagen'), bmRead);
            JpegImage := TJPEGImage.Create;
            JpegImage.LoadFromStream(BlobStream);

            ImagenProd1.Picture.Assign(JpegImage);
          finally
            JpegImage.Free;
            BlobStream.Free;

            SinImagenProd1.Visible := false;
            ImagenProd1.Visible := true;
          end;
        End;
     End
        else
     Begin
          SinImagenProd1.Visible := true; // esto es un image que se superpone si no tiene imagen mostratno                                      //que es un a incognita una imagen por defecto
          ImagenProd1.Visible := false;
     End;
end;



creo es mas menos lo que quieres, salu2

fredo 02-04-2016 17:27:40

para grabar la imagen seria muy similar.

Código Delphi [-]
var JpegImage: TJPEGImage;
begin
     if FDQInsumoscodigo.AsString <> ''
     then
     Begin
         if abrir.Execute
         then
         Begin
              JpegImage:=TJPEGImage.Create;
              try
              JpegImage.LoadFromFile(abrir.FileName);
              Imagen.Picture.Assign(JpegImage);
              finally
                    JpegImage.Free;
              end;

              FDQImagenes.Close;
              FDQImagenes.ParamByName('codigo').AsInteger:=FDQInsumoscodigo.AsInteger;
              FDQImagenes.Open;

              if FDQImagenescodigo.AsString = ''
              then
              Begin
                   FDQImagenes.Append;
                   FDQImagenescodigo.Value:=FDQInsumoscodigo.AsInteger;
              End
                 else FDQImagenes.Edit;
             FDQImagenesimagen.LoadFromFile(abrir.FileName);
             FDQImagenesExt.Value:=Saca_extencion(abrir.FileName);
             FDQImagenes.Post;
             SinImagen.Visible:=false;
             imagen.Visible:=true;
         End;
     End;
end;


La franja horaria es GMT +2. Ahora son las 03:48:48.

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