FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Grabar imagen en tabla mysql
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Grabar imagen en tabla mysql
Posted: Thu Jan 18, 2024 06:30 PM

Saludos estimados,

Necesito grabar una imagen .PNG en un campo de una tabla MySql y luego recuperarla para mostrarla.

Quien me da alguna orientaci贸n?

"Los errores en programaci贸n, siempre est谩n entre la silla y el teclado..."



Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin



Carora, Estado Lara, Venezuela.
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Grabar imagen en tabla mysql
Posted: Thu Jan 18, 2024 11:43 PM
Por alguna raz贸n un PNG cuando lo convertimos a string queda muy grande y al guardarlo en mysql
se cae el sistema.
Pero hay una soluci贸n , en el siguiente link lo explica bien el amigo Juan Navas

https://forums.fivetechsupport.com/viewtopic.php?f=6&t=30337&hilit=GETPAGES

saludos
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 151
Joined: Wed Oct 12, 2005 01:03 PM
Re: Grabar imagen en tabla mysql
Posted: Fri Jan 19, 2024 01:36 AM

Yo guardo archivos de todo tipo en mysql como binarios en campos del tipo "long text"

Primero se debe configurar Mysql para que lo permita

Desde el administrador de Mysql entras en Startup variables

Debes entrar en modo localhost y ejecutar como administrador

vas a la ceja Advanced Networking

en el apartado Data / Memory Size

le cambias a Max Packed size (yo le puse 16M)

Para subir un archivo cualquiera

FUNCTION GUARDADIR(cFILE,cTIPO)

APROG :=DIRECTORY(cFILE)

PUBLIC PROGNOM:=APROG[1,1]

PUBLIC PROGTAM:=APROG[1,2]

PUBLIC PROGFEC:=APROG[1,3]

PUBLIC PROGHRS:=APROG[1,4]

*

cFileG := StrToHex(MemoRead(cFILE))

*

cCMDVAL :=""

cCmdSql := "INSERT INTO PROGRAMA(TIPO,ARCHIVO,NOMBRE,FECHA,TAMA,HORA) VALUES( "

cCMDVAL := cCMDVAL+"'"+cTIPO +"', "

cCMDVAL := cCMDVAL+"'"+cFileG +"', "

cCMDVAL := cCMDVAL+"'"+cFILE +"', "

cCMDVAL := cCMDVAL+"'"+DToS(PROGFEC)+"',"

cCMDVAL := cCMDVAL+"'"+Str(PROGTAM) +"',"

cCMDVAL := cCMDVAL+"'"+PROGHRS+"' );"

IF !EJECUTA(cCmdSql+cCMDVAL)

MsgStop("ERROR AL GRABAR ARCHIVO "+cFILE ,"AVISO")

RETURN(.F.)

ENDIF

RETURN(.T.)

PARA RECUPERAR

FUNCTION EDATOS(cDAT,cNOM)

cARCH=HexToStr(cDAT)

ASALIDA:=".\"+cNOM

hFile := FCreate(asalida)

FWrite( hFile, cARCH)

FClose( hFile )

RETURN NIL

Marco Augusto Rodriguez Manzo

FWH January 2020 Xharbour 1.2.3

MySQL 5.0.19 Fastreport



PERZO SOFT

Sistemas Personalizados
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Grabar imagen en tabla mysql
Posted: Fri Jan 19, 2024 04:20 PM
MI estimado,,,,
Code (fw): Select all Collapse
If lModImg
Function GrabarFoto(cLogo) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽// ruta completa de la imagen
聽 聽 cChr := StrToHex(MemoRead( cLogo ) ) 聽 聽 聽 聽 // tiene que estar en archivo
聽 聽 oCn:Update( "general", {"logotipo"}, {cChr}, "registro = " + cReg ) 聽 // guardar en MEDIUMBLOB
EndIf
Return(NIl)
Code (fw): Select all Collapse
Function LeerLogotipo(oCn, oImagen, lBmp)
local cDat, oDat, cIMg, cFilRt, nHnd, oImg
DEFAULT lBmp := .f.

cDat := "SELECT logotipo FROM general LIMIT 1"
oDat := SQLQry(oCn, oDat, cDat)

If EMPTY(oDat:logotipo)
聽 聽Return(oImagen)
EndIf

oImg := oDat:logotipo

IF !EMPTY(oImg)
聽 TRY
聽 聽 cImg := HexToStr(oImg)
聽 CATCH
聽 聽 Return(oImagen)
聽 END
聽 If !lBmp
聽 聽 聽oImagen:SetSource(cImg)
聽 聽 Else
聽 聽 聽oImagen:LoadImage(cImg)
聽 Endif
EndIf

Return(oImagen)
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Grabar imagen en tabla mysql
Posted: Fri Jan 19, 2024 08:03 PM
Otra opci贸n
Code (fw): Select all Collapse
cRutaFoto := "c:\miruta\imagen.png"
rutaTXT := "c:\miruta\imagen.txt"

fMimeEnc( cRutaFoto, rutaTXT ) //Convertimos la imagen o cualquier archivo, en texto base64
cText := MemoRead( rutaTXT ) //Recuperamos el texto
cText := STRTRAN(cText,CRLF,'') 聽//Lo limpiamos

y con esta variable cText a la base de datos en un campo de tipo MEDIUMTEXT
Para recuperarla
Code (fw): Select all Collapse
cVar:=聽 "SELECT * FROM tabla WHERE campo=variable"
oRs := FW_OPENRECORDSET(oCn,cVar,adLockOptimistic,adOpenKeyset)
if oRs:RecordCount()#0
聽 聽 uArch := hb_base64decode( oRs:Fields("campo"):Value )
聽 聽 oFto:SetSource( uArch ) //Aqui la asigamos al objeto ximage, pero la puedes colocar si quieres en el disco duro
聽 聽 oFto:refresh()
else 
聽 聽 oFto:SetSource( cRutaNoF )
聽 聽 oFto:refresh()
endif
oRs:close()
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: Grabar imagen en tabla mysql
Posted: Tue Jan 30, 2024 09:54 PM

Estimados amigos.

Saludos a todos,

Muchas gracias a quienes me sugirieron ideas a mi pregunta.

Despu茅s de verlas todas, me decant茅 por la opci贸n de leandro, que me pareci贸 la mas sencilla. Despu茅s de adaptarla a mi sistema, qued贸 muy bien.

Ciertamente, he leido en internet diversas opiniones y todas apuntan a que lo mejor es guardar las im谩genes en carpetas de disco, bien sea en la nube o localmente.

Se dice de que guardarlas en tablas finalmente termina generando problemas, aunque no especifican que tipo de problemas.

Esperar茅 a ver como se comporta y el feed back del cliente,

Una vez m谩s, muchas gracias a todos.!

"Los errores en programaci贸n, siempre est谩n entre la silla y el teclado..."



Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin



Carora, Estado Lara, Venezuela.

Continue the discussion