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*/ |
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 |
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. |
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):
|
|
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. |
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*/ |
La franja horaria es GMT +2. Ahora son las 16:13:24. |
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