Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   guardar imagen en campo blob (https://www.clubdelphi.com/foros/showthread.php?t=81289)

edgar_prospero 30-10-2012 19:42:24

guardar imagen en campo blob
 
que hay amigos tengo un sistema donde voy agregando productos a una base de datos mysql, pero tengo un problema a cada producto quiero agregar una imagen, me gustaria saber que componentes o que necesito para lograrlo, ojala me puedan orientar un poco. para ir guardando lo demas utilizo el siguiente codigo:

Código Delphi [-]
tabla.SQL.Clear;
tabla.Close;
tabla.SQL.Add('insert into clientes(codigo, nombre, direccion, comentarios)values(:pcodigo, :pnombre, :pdireccion, :pcomentarios) on duplicate   key update nombre=:pnombre, direccion=:pdireccion, comentarios=:pcomentarios');
tabla.ParamByName('pcodigo').AsString:=codigo.Text;
tabla.ParamByName('pnombre').AsString:=nombre.Text;
tabla.ParamByName('pdireccion').AsString:=direccion.Text;
tabla.ParamByName('pcomentarios').Asstring:=comentarios.Text;

tabla.Execute;
nombre.Clear;
nombre.Clear;
direccion.Clear;
comentarios.Clear;


query.Close;
     query.SQL.Text:='SELECT codigo FROM clientes ORDER BY codigo desc LIMIT 1';
     query.Open;
    codigo.text := IntToStr(query.FieldByName('codigo').asInteger +1) ;
     nombre.SetFocus;
      nombre.SelectAll;

  //tabla.SQL.Clear;

  showmessage('grabado con exito ');

ecfisa 30-10-2012 19:59:39

Hola edgar.

Primeramente necesitas crear un campo de tipo blob en la tabla productos para que así puedas almacenar la imágenes correspondientes.

Al pié de esta página tenes varios enlaces relacionados a tu consulta, y creo que este [Guardar una imagen a una base de datos en mySQL], también te puede ser útil.

Saludos. :)

edgar_prospero 30-10-2012 20:11:12

gracias por responder, si el campo ya lo cree, algo que me falto especificar es que quiero mediante un boton se abra para buscar la imagen a guardar

ecfisa 30-10-2012 20:41:36

Hola Edgar.

Podrías usar un TOpenPictureDialog para buscar la imágen y luego en el evento OnClick del botón, hacer algo como por ejemplo:
Código Delphi [-]
...
uses jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
  Jpg : TJPEGImage;
begin
  if OpenPictureDialog1.Execute then
  begin
    Jpg := TJPEGImage.Create;
    try
      Jpg.LoadFromFile(OpenPictureDialog1.FileName);
      DataSet.Edit;
      DataSet.FieldByName('CAMPO_BLOB').Assign(Jpg);
    finally
      Jpg.Free;
    end;
  end;
end;
No utilizo MySQL, pero en Firebird guarda la imágen jpg sin problemas.

Saludos.

ecfisa 30-10-2012 20:59:40

Hola de nuevo.

Se me escapó, que tal vez tengas otros tipos que jpg... :o

Proba de esta forma:
Código Delphi [-]
...
uses jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
  Pic : TPicture;
begin
  if OpenPictureDialog1.Execute then
  begin
    Pic := TPicture.Create;
    try
      Pic.LoadFromFile(OpenPictureDialog1.FileName);
      DAtaSet.Edit;
      DataSet.FieldByName('CAMPO_PBLOB').Assign(Pic);
     finally
      Pic.Free;
    end;
  end;
end;

Saludos.

edgar_prospero 30-10-2012 21:11:26

gracias por tu respuesta.

no se en que cambie firebird a mysql pero con este procedimiento no me marca ningun error, pero no me esta guardando nada en la base de datos

Casimiro Notevi 30-10-2012 21:22:08

Quizás falte el post
Código Delphi [-]
DataSet.FieldByName('CAMPO_PBLOB').Assign(Pic);
DataSet.Post;

ecfisa 30-10-2012 22:06:32

Cita:

Empezado por Casimiro Notevi (Mensaje 448382)
Quizás falte el post
Código Delphi [-]
DataSet.FieldByName('CAMPO_PBLOB').Assign(Pic);
DataSet.Post;

Exáctamente.^\||/

No lo agregué allí por que supuse que tenía más campos y realizaba el guardado al finalizar la carga de los datos.

Saludos.:)

martini002 14-11-2012 19:51:36

Saludos Amigos,
Tengo 2 dias luchando con esto,
intentando guardar una imagen en una tabla de una BD
tengo una tabla precisa con campos NumeroConductor e Imagen
la ultima de tipo Blob, he tratado de modificar cuanto codigo he visto
pero sin ningun exito hasta ahora, intente con Stream, y no funciono,
ahora estoy intentando con tu codigo Ecfisa y no estoy muy seguro
de como adaptarlo, estoy usando ZEOS 7 + SQLite + D2010

mira un pedazito de mi codigo:

Justo ahorita intento con este, tratando de asignar al campo Blob la imagen,
pero me da un error, diciendo que no consigue el campo Imagen :S

Código Delphi [-]
ZQuery1.Close;
                ZQuery1.SQL.Text:= 'Insert Into ImagenesConductores Values ('+IntToStr(NumeroConductor)+', :Imagen)';
                ZQuery1.FieldByName('Imagen').Assign(Image1);
                ZQuery1.ExecSQL;

Y este otro intentando con asignacion de Stream, pero sin exito,
me da un error, Unrecognized token: "'" Creo que es con el SQLite me parece

Código Delphi [-]
_Imagen := TMemoryStream.Create;
                Image1.Picture.Graphic.SaveToStream(_Imagen);

                ZQuery1.Close;
                ZQuery1.SQL.Text:= 'Insert Into ImagenesConductores Values ('+IntToStr(NumeroConductor)+', :Image)';
                ZQuery1.Params.Items[0].LoadFromStream(_Imagen, ftBlob);
                ZQuery1.ExecSQL;

Les agradezco muchisimo su ayuda, estoy nuevo con esto y apenas es mi primer intento
usando campos de tipo Blob. Saludos

martini002 14-11-2012 20:34:47

Estuve probando este codigo,
aunque no me da ningun error tampoco hace nada :/
crea un registro null en la BD inclusive en el campo Blob

Código Delphi [-]
Var
JPG:TPicture;

Begin
Jpg:= TPicture.Create;
Jpg.LoadFromFile(OpenPictureDialog1.Filename);

ZQuery2.Open;
ZQuery2.Edit;
ZQuery2.FieldByName('Imagen').Assign(Jpg);
ZQuery2.Post;

end

Edito:
De hecho no es el mismo orden en el que lo tengo,
pero si estoy seguro que carga la imagen a la variable Jpg
porque a su vez lo hace con un TImage

ecfisa 14-11-2012 21:47:22

Hola martini002.

Tal vez SQLite requiera algún tratamiendo diferente, no lo conozco. Pero revisa si en estos enlaces encontras algo que sirva:
Saludos. :)


La franja horaria es GMT +2. Ahora son las 19:24: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