Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Imagen JPG en una base de datos Access (https://www.clubdelphi.com/foros/showthread.php?t=42862)

edus1984 24-04-2007 20:28:09

Imagen JPG en una base de datos Access
 
Hola a todos, esta es la primera vez que entro al foro. Quería preguntar si alguien me puede ayudar con esto:

Estoy tratando de mostrar una imagen jpg almacenada como objeto OLE en una bd Access, y me da este número de error: JPEG error #68.

Lo que hago para mostrar la imagen es utilizar un objeto TImage, asignándole un objeto TJpegImage, a partir de un flujo de un campo de una tabla (que contiene la imagen). Todo esto se hace cuando se presiona un boton. Les paso el código del botón:

Código:

procedure TForm1.botonClick(Sender: TObject);
var
  flu  : TADOBlobStream;
  Pic : TJpegImage;
begin
  flu := TADOBlobStream.Create
        (AdoTable1Foto, bmRead);
  try
    flu.Seek(JpegStartsInBlob(AdoTable1Foto),
            soFromBeginning); //Esta función busca el inicio de la imagen
    Pic:=TJpegImage.Create;
    try
    Pic.LoadFromStream(flu); //Es aquí donde da el error
    ADOImage.Picture.Graphic:=Pic;
    finally
    Pic.Free;
    end;
  finally
    flu.Free
  end;
end;

También les paso el código de la función de búsqueda:

Código:

function JpegStartsInBlob
        (PicField:TBlobField):integer;
var
 flu    : TADOBlobStream;
 buffer : Word;
 hx    : string;
begin
 Result := -1;
 flu := TADOBlobStream.Create(PicField, bmRead);
 try
  while (Result = -1) and
        (flu.Position + 1 < flu.Size) do
  begin
  flu.ReadBuffer(buffer, 1);
  hx:=IntToHex(buffer, 2);
  if hx = 'FF' then begin
    flu.ReadBuffer(buffer, 1);
    hx:=IntToHex(buffer, 2);
    if hx = 'D8' then Result := flu.Position - 2
    else if hx = 'FF' then
      flu.Position := flu.Position-1;
  end; //if
  end; //while
 finally
  flu.Free
 end;  //try
end;

Desde ya muchas gracias por su respuesta. Saludos..

Caral 24-04-2007 20:55:57

Hola
Uso access e incluyo jpg sin problemas en un campo memo, sin tanta complicacion, ni funciones, ni campos raros, ni nada.
Para traer un jpg creado desde un archivo independiente a access tambien se puede con un memo.
Saludos

Delfino 25-04-2007 00:43:59

Cita:

y me da este número de error: JPEG error #68.
Este tema se ha tratado bastantes veces antes, si te molestas un poco en buscar encontraras la respuesta..

edus1984 25-04-2007 07:15:10

He buscado en los foros, pero no doy con ningun tema donde se mencione el error #68 de la unidad Jpeg. No quiero ser molesto pero.. ¿alguien sabe de que se trata este error? o ¿donde puedo encontrar una referencia de estos errores para saber que hago mal en el código? El problema sale cuando se ejecuta la instrucción Pic.LoadFromStream(flu), y no entiendo por que, si el flujo tendría que ser correcto:confused: . Seguramente hay algo que no estoy observando, pero no se que es. Por favor ayudenme:(

Muchas gracias por su tiempo nuevamente, y me parece bárbaro este sitio, ya que enseguida tuve una respuesta. Saludos..

casacham 25-04-2007 21:29:14

Hay Solucion
 
Hola querido
Mira, lo mas probable es que no hayas buscado, porque no hace mas de cuatro semanas volvimos a solucionar el problema una vez mas. Aqui abajo te tiro el link del hilo donde esta la respuesta a tus problemas. Basicamente tenes que leer el Boletin Pascal N° 11. No se que es lo que quieres intentar con ese codigo y complicarte la existencia de esa forma. Haceme caso y lee el hilo que te indico aqui y despues buscas el boletin pascal n°11 cuyo link esta en ese hilo. Contanos como te fue y si sos nuevo lee bien la guia de estilo.


http://www.clubdelphi.com/foros/showthread.php?t=41768

Adios

edus1984 26-04-2007 07:13:01

Gracias por la ayuda. Espero poder ayudarles en algo alguna vez.

Delfino 06-05-2007 16:50:19

Aqui hay una solucion mejor,
por cierto esta solucion la posteo por segunda o por tercera vez :( ..

casacham 08-05-2007 01:52:10

Mejor el Boletin Pascal N#11
 
Hola Delfino
Estuve leyendo la solución que propusiste para el tema imagenes. Te voy a explicar porque prepiero la solución del Boletin Pascal N° 11. En este se explica como hacer un bloque de código que sirva para manipular cualquier tipo de gráfico. Es decir poder postearlo en la base de datos y luego recuperarlo para enseñarlo. La diferencia con el articulo que nos propones es que solo tiene respuestas para extensiones jpg. De todas formas, no debe ser descartado por quien lea esto, ya que explica muy bien en sus 5 secciones todo lo que ocurre cuando se esta trabajando y eso es muy valido. Gracias por tu aporte


La franja horaria es GMT +2. Ahora son las 04:35:01.

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