Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2005
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Question Se pueden almacenar imágenes en una BD en Access??

Estoy trabajando con Access (2003) y me gustaría saber si se pueden almacener imágenes y de ser posible cómo se hace...Estuve mirando un tipo de dato (El OLE Object) parece que ahí está la cosa pero no se me ocurre como utilizarlo.
Probe pasarle la dirección de una imagen y la adicionaba a la BD pero cuando accedí desde una aplicación y traté de cargar los datos en un DBImage me decia que eran incompatibles los tipos.

Cualquier sugerencia al respecto la agradeceré

/*Saludos*/
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #2  
Antiguo 02-08-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Sí se puede.
Aquí lo tienes explicado paso a paso. Leete el artículo completo. Explica varias formas de hacerlo y porque cada una de ellas es correcta o no.

http://delphi.about.com/od/database/l/aa030601a.htm
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 02-08-2005
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Gracias

Gracias Neftali veo que la solución estaba ante mis narices, para la próxima garantizo buscar bien antes de preguntar. Sin embargo ya he hecho todos los pasos y me da un error en tiempo de ejecución que no logro depurar por ningún lado. Este es el error: Stream read error. La aplicación no explota ni nada de eso tan solo muestra este error y ya. Echale un vistazo al código como me quedo, casi igual que el ejemplo que me dices...

....................
const
JPEGstarts = 'FFD8';
BMPstarts = '424D'; //BM

var
Form1: TForm1;
implementation
uses jpeg;
{$R *.dfm}
procedure TForm1.btnShowImageClick(Sender: TObject);
var
bS : TADOBlobStream;
Pic : TJpegImage;
begin
bS := TADOBlobStream.Create(AdoTable1Picture, bmRead);
try
bS.Seek(JpegStartsInBlob(AdoTable1Picture),soFromBeginning);
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(bS);
ADOImage.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
bS.Free
end;
end;

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

end.
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #4  
Antiguo 02-08-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Utiliza TAG´s en el código Delphi, verás como se vuelve más legible.
http://www.clubdelphi.com/foros/misc.php?do=bbcode

Mira la diferencia (Delphi -entre corchetes- al empezar y /Delphi -entre corchetes- al acabar):

Código Delphi [-]
     const
    JPEGstarts = 'FFD8';
    BMPstarts = '424D';  //BM
   
   var
     Form1: TForm1;
   implementation
   uses jpeg;
   {$R *.dfm}
   procedure TForm1.btnShowImageClick(Sender: TObject);
   var
     bS  : TADOBlobStream;
     Pic : TJpegImage;
   begin
     bS := TADOBlobStream.Create(AdoTable1Picture, bmRead);
     try
       bS.Seek(JpegStartsInBlob(AdoTable1Picture),soFromBeginning);
       Pic:=TJpegImage.Create;
       try
        Pic.LoadFromStream(bS);
        ADOImage.Picture.Graphic:=Pic;
       finally
        Pic.Free;
       end;
     finally
       bS.Free
     end;
   end;
    
   procedure TForm1.FormCreate(Sender: TObject);
   begin
     ADOTable1Picture.SaveToFile('BlobImage.dat');
   end;
   function TForm1.JpegStartsInBlob(PicField: TBlobField): integer;
   var
    bS     : TADOBlobStream;
    buffer : Word;
    hx     : string;
   begin
    Result := -1;
    bS := TADOBlobStream.Create(PicField, bmRead);
    try
     while (Result = -1) and
           (bS.Position + 1 < bS.Size) do
     begin
      bS.ReadBuffer(buffer, 1);
      hx:=IntToHex(buffer, 2);
      if hx = 'FF' then begin
        bS.ReadBuffer(buffer, 1);
        hx:=IntToHex(buffer, 2);
        if hx = 'D8' then Result := bS.Position - 2
        else if hx = 'FF' then
          bS.Position := bS.Position-1;
      end; //if
     end; //while
    finally
     bS.Free
    end;  //try
   end;
   
   end.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 02-08-2005
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Código Delphi [-]
 OK, entendí el mensaje pero aún no doy con el error...
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #6  
Antiguo 02-08-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A mi me funciona perfectamente tu código.
He guardado añadido una imagen a la Base de Datos con el código que aparece al final de la página:
http://delphi.about.com/library/code/ncaa030601a.htm

Y luego la visualizo correctamente con el código que has puesto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 02-08-2005
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Wink

OK, de todos modos revisaré todo otra vez, quizás el problema esté en la BD o en el formato de la imagen que he guardado quizás no sea compatible.

Muchas gracias

/*oracle*/
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 17:52:16.


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