PDA

Ver la Versión Completa : Guardar una imagen en un DB


lore
19-03-2007, 21:27:00
Hola:) Quisiera guardar una imagen en el campo de una tabla. Lo que quiero no es que el campo levante la dirección de un archivo en una máquina, sino lo que quiero es que una imagen se guarde en un campo de la tabla. El motivo de esto es evitar que se vean en un directorio las imágenes.


Saludos:)

Caral
19-03-2007, 21:34:11
Hola lore
No veo cual es el problema.
Podrias indicar que base de datos usas.?
Saludos

lore
20-03-2007, 05:18:05
Hola. Lo que quiero es que me guarde la imagen en campo blob y nose como hacerlo:confused: . La DB que uso en MySQL. Saludos:)

Neftali [Germán.Estévez]
20-03-2007, 10:54:41
Saber los componentes que usas para acceder tampoco vendría mal...

Neftali [Germán.Estévez]
20-03-2007, 10:57:02
Una búsqueda en los foros también iría bien; Tal vez llegaría a un sitio como este (http://www.clubdelphi.com/foros/showthread.php?t=15975&highlight=MySQL+imagen).

fidel
20-03-2007, 17:07:48
Esto funciona en FireBird. Adaptalo a tus necesidades.

Guardado en un campo Blob pero poniendo otro campo Varchar donde se guarda el formato de la foto: bmp o jpg

Se visualiza en TImage

Debes añadir en el uses del form la unit JPG.


//cargar foto
procedure TFDatos.Cargarfoto1Click(Sender: TObject);
var
m, f: TStream;
s: string;
begin
//se abre picturedialog para cargar fichero foto que se coja
if dlgOpenPicture.Execute then
begin
//modo edición
DM.IBDSAlumnos.Edit;
//stream a partir campo Blob que contendrá la imagen
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmWrite);
//stream para acceder al archivo gráfico
f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
//copiar de un stream a otro
m.CopyFrom(f, f.Size);
//coger formato foto y ponerlo en campo correspondiente
s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
if s='.JPEG' then
s:= '.JPG';
DM.IBDSAlumnosFORMATOFOTO.AsString:= Copy(s,2,3);
DM.IBDSAlumnos.Post;
//destruir streams
f.Free;
m.Free;
end
end;



//borrar foto
procedure TFDatos.Borrarfoto1Click(Sender: TObject);
begin
//borrar imangen
ImageFoto.Picture.Assign(nil);
//borrar foto del campo blob
if (DM.IBDSAlumnos.State <> dsEdit) and (DM.IBDSAlumnos.State <> dsInsert) then
DM.IBDSAlumnos.Edit;
DM.IBDSAlumnosFOTO.Assign(nil);
DM.IBDSAlumnos.Post;
end;


//mostrar imagen (evento on change de datasource)
procedure TFDatos.DSAlumnosFDataChange(Sender: TObject; Field: TField);
var
m: TStream;
begin
if DM.IBDSAlumnosFOTO.IsNull then
//para registros sin foto poner imagen vacia
ImageFoto.Picture := nil
else
begin
if DM.IBDSAlumnosFORMATOFOTO.AsString = 'BMP' then
//si es formato BMP
ImageFoto.Picture.Graphic:= TBitmap.Create
else if DM.IBDSAlumnosFORMATOFOTO.AsString = 'JPG' then
//si es formato JPG
ImageFoto.Picture.Graphic:= TJpegImage.Create
else
Exit;
//copiar los datos desde la tabla con un stream
m:= DM.IBDSAlumnos.CreateBlobStream(DM.IBDSAlumnosFOTO, bmRead);
ImageFoto.Picture.Graphic.LoadFromStream(m);
m.Free;
end;
end;