Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Guardar una imagen a una base de datos en mySQL (https://www.clubdelphi.com/foros/showthread.php?t=65443)

Elqui 15-12-2009 15:23:29

Guardar una imagen a una base de datos en mySQL
 
Tengo una tabla, en MySQL, para guardar datos de personas (nombres, apellidos, ..., foto). El campo foto es tipo BLOB.

Para actualizar la tabla desde un form, he ligado la tabla a un DataSource al cual están ligados los DBEdit de los campos. Para el campo foto uso un DBImage.

El codigo para actualizar la tabla es el siguiente:

begin
Tabla1.Edit; //abrir la tabla en modo edición
TOpenPictureDialog1.Execute; //Seleccionar la imagen de un directorio
TDBImage1.Picture.LoadFromFile(TOpenPictureDialog1.FileName); //cargar
Tabla1.Post; //guardar los datos en la tabla
end;

El código se ejecuta correctamente hasta llegar a la última línea (Tabla1.Post;) que es donde me salta el siguiente error: "No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó"

Los demas campos de la tabla(nombres, apellidos, etc.) si son actualizados pero el campo foto no lo actualiza.

Agradezco puedan ayudarme a solucionar este error.

radenf 15-12-2009 20:52:15

Estimado Elqui :

Yo utilizo el siguiente código y funciona perfecto

Código Delphi [-]
if DataSetEdit1.Execute then
if OpenPictureDialog1.Execute then
EDBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
DataSetRefresh1.Execute;
end;

Esto te permitirá ingresar en la base de datos imágenes BMP. Para ingresar imágenes en formato Jpeg deberías usar los componentes EDBImage 1.6 de Sebastián Mayora o el JvEDBImage de las librerías Jedi.

Saludos y suerte

Elqui 15-12-2009 21:00:35

Gracias Radenf
 
Efectivamente, necesito guardar imagenes JPG, buscaré los componentes que me indicas y luego probaré con el código que has puesto.

radenf 15-12-2009 21:38:37

El EDBImage 1.6 funciona sólo hasta Delphi 7.
Las Jedi entiendo que hasta Delphi 2009.
Yo uso Delphi 2007 y tengo una versión de EDBImage 1.6 compilada para esta versión,que al instalarla tira algunos errores, pero al final funciona. Si fuera esta la versión que requieres te la podría enviar por mail privado.

Salu2

heroe 16-12-2009 09:38:44

Guardando una imagen o archivo
 
Te recomiendo que uses un campo tipo longblob.

Ejemplo guardar una imagen

Donde
  • _Imagen es una variable stream
  • imgImagen es un TImage
  • ADOQuery1 es TADOQuery
Código Delphi [-]
_Imagen := TMemoryStream.Create;
imgImagen.Picture.LoadFromFile(OpenPictureDialog1.FileName);
_Imagen.LoadFromFile(OpenPictureDialog1.FileName);

with ADOQuery1 do
begin
SQL.Add('Insert into Tabla');
SQL.Add('(Imagen)');
SQL.Add('Values(:Param0)');
with Parameters do
  Items[0].LoadFromStream(_Imagen, ftBlob);
ExecSQL;
end;

_Imagen.Free;

vinicc 18-12-2009 01:05:11

pegando la imágen
 
hola ! quiero comentarte que una vez me pasó lo mismo pero incrementando el tamaño del campo se solucionó el problema. Por otraparte utilizo una forma diferente de colocar la imagen y se debe a las especificaciones del cliente. Lo que hago es lo siguiente:

el operador coloca la imágen en el buffer de memoria (copiar) y luego pulsa un botón y la imagen se "pega" en el campo.

if dbset.CoCfg.State <> dsEdit then dbset.CoCfg.Edit;
Logo.PasteFromClipboard;

Luego el usuario decide si cancela o guarda los cambios efectuados. Logo es un TDBImage


La franja horaria es GMT +2. Ahora son las 13:49:14.

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