Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2018
oh.mely oh.mely is offline
Registrado
NULL
 
Registrado: may 2018
Posts: 6
Poder: 0
oh.mely Va por buen camino
No se guardan las imágenes completas en el campo LONGBLOB

Hola a todos, soy nueva aquí, verán, mi caso es el siguiente:
-Uso Delphi 7, tengo un formulario de productos en el cual necesito guardar una foto (.jpg) en un campo tipo blob en mi BD. Esto desde un TImage, antes usaba un DBImage pero me leyendo otros foros vi que este sólo me permitía guardar imágenes .bmp, en fin, ya logré que la imagen se guarde con el siguiente código:

Código Delphi [-]
procedure TFr_Producto.BitBtn1Click(Sender: TObject);
  var
  fs: TMemoryStream;
  imgJPG: TJPEGImage;
begin
  if dlAbrirFoto.Execute then
  begin
    imgJPG:= TJPEGImage.Create;
    fs:= TMemoryStream.Create;
    try
      imgJPG.LoadFromFile(dlAbrirFoto.FileName);
      imgJPG.SaveToStream(fs);
      fs.Seek(0,soFromBeginning);
      try
        imgFoto.Picture.Assign(imgJPG);
        finally
          fs.Free;
      end;
      except
        on E : Exception do 
      begin 
        MessageDlg('Asegúrese de que la imagen seleccionada es de ' + 
           ' tipo JPEG con formato correcto. ' +
           E.Message, mtError, [mbOK], 0);
      end;
    end;

  end;

end;

Lo que ahora necesito es que al consultar el registro me aparezca la foto, pero me marca un error que dice que el formato de la foto no es correcto. lo Hago de la siguiente manera:
*Aquí consulto los datos*
Código Delphi [-]
procedure TFr_Producto.FormShow(Sender: TObject);
begin
  Seleccion:= 'select producto.ID, CODBAR, NOMBRE, DESCRIPCION, inventario.EXISTENCIA, ';
  Seleccion:=Seleccion+'FAMILIA, MARCA, FECHA_ALTA, inventario.STOCK_MAX, inventario.STOCK_MIN, ';
  Seleccion:=Seleccion+' inventario.PRE_COST, inventario.PRE_BRUTO, inventario.PRE_VTA, inventario.COST_MED, IMAGEN ';
  Seleccion:=Seleccion+'from producto inner join inventario ';
  Seleccion:=Seleccion+'on producto.ID = inventario.IDPROD ';
  Seleccion:=Seleccion+'where producto.ID = :idP';
  buscar_producto(CatProductos.idProd);
end;

*Aquí los asigno al formulario*
Código Delphi [-]
procedure TFr_Producto.buscar_producto(idProd: Integer);

begin
  Edit1.Text:= IntToStr(CatProductos.idProd);
  Query:= MDatos.Query01;
  Query.Close;
  Query.SQL.Clear;
  Query.SQL.Add(Seleccion);
  Query.Params[0].AsInteger:=CatProductos.idProd;
  Query.Open;

  if not Query.IsEmpty then
  begin
    Edit1.Text:=Query.Fields[0].AsString;
    Edit2.Text:=Query.Fields[1].AsString;
    Edit4.Text:=Query.Fields[2].AsString;
    Edit3.Text:=Query.Fields[3].AsString;
    Edit8.Text:= Query.Fields[6].AsString;
    Edit9.Text:= Query.Fields[5].AsString;
    Fecha_Alta.Date:= Query.Fields[7].AsDateTime;
    Edit7.Text:=Query.Fields[10].AsString;
    Edit5.Text:=Query.Fields[13].AsString;
    Edit11.Text:=Query.Fields[11].AsString;
    Edit13.Text:=Query.Fields[12].AsString;
    Edit14.Text:= Query.Fields[9].AsString;
    Edit15.Text:= Query.Fields[8].AsString;
    Edit16.Text:= Query.Fields[4].AsString;
    imgFoto.Picture.Graphic.Assign(Query.Fields[14]);
  end;
end;

El error me lo marca en - imgFoto.Picture.Graphic.Assign(Query.Fields[14]); -
Sé que igual y es "tonto" la manera en que le estoy asignando el valor al TImage (imgFoto) pero ya he intentado de muchas maneras y no puedo. No sé si alguien pueda ayudarme, de antemano muchas gracias y espero haber publicado en el lugar correcto.
Responder Con Cita
  #2  
Antiguo 30-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola oh.mely, bienvenida a los foros de Club Delphi

Si el formato guardado es un .jpg válido, inténtalo de este modo:
Código Delphi [-]
...

uses Jpeg;

procedure TuForm.BitBtn1Click(Sender: TObject);
var
  J: TJPEGImage;
begin
  //...
  Image1.Picture := nil;
  J := TJPEGImage.Create;
  try
    J.Assign(TBlobField(Query.FieldByName('IMAGEN')));
    imgFoto.Picture.Assign(J);
  finally
    J.Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 30-05-2018
oh.mely oh.mely is offline
Registrado
NULL
 
Registrado: may 2018
Posts: 6
Poder: 0
oh.mely Va por buen camino
¡Muchísimas gracias ecfisa! si me funcionó. Gracias por el tiempo y la atención.

¡Saludos!

Última edición por oh.mely fecha: 30-05-2018 a las 23:58:51. Razón: Error de ortografía
Responder Con Cita
  #4  
Antiguo 31-05-2018
oh.mely oh.mely is offline
Registrado
NULL
 
Registrado: may 2018
Posts: 6
Poder: 0
oh.mely Va por buen camino
No se guardan las imágenes completas en el campo LONGBLOB

Buenas tardes, tengo un problema y no sé si alguien pueda ayudarme; verán, a través de un formulario en Delphi 7 estoy guardando una imagen .jpg en un campo 'IMAGEN' tipo LONGBLOB, el problema es que al consultar el registro desde mi formulario algunas imágenes se me muestran incompletas.

Buscando información encontré en LONGBLOB es el que acepta archivos más grandes, entonces no sé a que se deba, o si debo de utilizar otro tipo de dato.

De antemano gracias y saludos!
Responder Con Cita
  #5  
Antiguo 31-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No somos adivinos, debes decir qué base de datos usas, qué componentes, qué código estás usando para guardarla y para leerla, etc.
Por favor, no olvides leer nuestra guía de estilo, gracias y bienvenido a clubdelphi.

Por cierto, tu otro mensaje está muy relacionado con este, realmente viene a ser lo mismo, así que los he unido.
Responder Con Cita
  #6  
Antiguo 31-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por oh.mely Ver Mensaje
..., el problema es que al consultar el registro desde mi formulario algunas imágenes se me muestran incompletas.
...
Además de lo dicho por Casimiro, revisa que el control TImage tenga su propiedad Strech con el valor True.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 31-05-2018
oh.mely oh.mely is offline
Registrado
NULL
 
Registrado: may 2018
Posts: 6
Poder: 0
oh.mely Va por buen camino
Hola, gracias por responder y pido una disculpa por no formular bien mi duda. Ya arreglé el problema, he optado por guardar la ruta de la imagen y no la imagen como tal en mi BD, por lo que leí en varios blogs y foros es lo más "óptimo".

La propiedad Strech de mi TImage si era True, lo que pasaba es que no la cargaba completa cuando me mostraba la imagen, aparecía como cortada, por lo que leí se debía a que las fotos que se mostraban así eran muy grandes para el campo longblob, por eso he recurrido a hacerlo de la otra manera.

Saludos.
Responder Con Cita
  #8  
Antiguo 31-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por oh.mely Ver Mensaje
Hola, gracias por responder y pido una disculpa por no formular bien mi duda. Ya arreglé el problema, he optado por guardar la ruta de la imagen y no la imagen como tal en mi BD, por lo que leí en varios blogs y foros es lo más "óptimo".
Depende, siempre depende.


Cita:
Empezado por oh.mely Ver Mensaje
La propiedad Strech de mi TImage si era True, lo que pasaba es que no la cargaba completa cuando me mostraba la imagen, aparecía como cortada, por lo que leí se debía a que las fotos que se mostraban así eran muy grandes para el campo longblob, por eso he recurrido a hacerlo de la otra manera.
Bueno, eso no es así, si aparecía cortada es porque no la habías guardado bien o no la has cargado bien. Un campo blob puede almacenar "cosas" de muchos gigas, y no creo que esas imágenes fuesen tan grandes.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como Obtener un Tipo de dato Variante berna Firebird e Interbase 2 02-11-2010 20:14:01
cambiar tipo de dato blob a varchar en firebird ingabraham Varios 4 13-08-2010 01:13:49
Ayuda con tipo de Dato BLOB Mysql 4.1 JerS Conexión con bases de datos 2 03-12-2008 04:00:41
Tipo de dato BLOB en postgre thelibmx Varios 1 12-12-2007 20:06:02
¿Cómo averiguar el tamaño de un tipo de dato? taote SQL 11 16-05-2007 21:45:51


La franja horaria es GMT +2. Ahora son las 23:00:10.


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
Copyright 1996-2007 Club Delphi