Page 1 of 1

Sacar imagen PNG de una tabla MySql (SOLUCIONADO)

PostPosted: Mon Mar 13, 2017 3:31 am
by Armando
Hola Foreros:

Llevo varios días sin lograr sacar con éxito una imagen PNG que esta
en un campo MEDIUMBLOB de una tabla MySql, lo curioso es que el
mismo código para una imagen PDF sí funciona de 100.

Este código con una imagen PDF va muy bien
Code: Select all  Expand view

        IF oRsImg:Fields("HDR_PDF"):Value != NIL
            cFile := oApp:cPathPdfs + "\1C" + SUBSTR(TIME(),1,2) + SUBSTR(TIME(),4,2) + SUBSTR(TIME(),7,2) + ".Pdf"

            IF File(cFile)
            Ferase(cFile)
            ENDIF

            //Se graba un  archivo temporal  en disco
         oHandle := FCreate(cFile)
        FWrite(oHandle, HexToStr(oRsImg:Fields("HDR_PDF"):Value))
        FClose(oHandle)

            IF FSize(cFile) > 0
                ShellExecute(0,"Open",cFile,,,1)
            ENDIF
        ENDIF
 


Sin embargo, prácticamente el mismo código no va
Code: Select all  Expand view

            IF oRsFic:Fields("FIC_FOT"):Value != NIL
                cFile := oApp:cPathFotos + "\F" + SUBSTR(TIME(),1,2) + SUBSTR(TIME(),4,2) + SUBSTR(TIME(),7,2) + ".Png"

                IF File(cFile)
                    Ferase(cFile)
                ENDIF

                //Se graba un archivo temporal en disco
                oHandle := FCreate(cFile)
            FWrite(oHandle, HexToStr(oRsFic:Fields("FIC_FOT"):Value))
            FClose(oHandle)

                IF FSize(cFile) > 0
                    ShellExecute(0,"Open",cFile,,,1)
                ENDIF
            ENDIF
 


Alguien que pueda darme una idea de que puede ser la diferencia, le busco
le busco y no doy con el error, será la edad? :D

La imagen esta bien grabada en la tabla pues la saco con NaviCat y es correcta pero
con mi código no.

Saludos

Re: Sacar imagen PNG de una tabla MySql

PostPosted: Wed Mar 15, 2017 9:45 am
by Carlos Mora
Armando,
Aparentemente usas ADO, verdad?
lo único que sospecho podría tener alguna limitación es el obtener el valor de un campo, si este campo es muy grande. No se mucho de ADO pero arriesgo que si la imagen ocupa cierto tamaño,
Code: Select all  Expand view
oRsImg:Fields("HDR_PDF"):Value
podría tener alguna limitación con el tamaño y fallar si es mayor.

¿Que tamaño tiene la imagen? ¿Y el PDF? ¿Has probado con imágenes pequeñas?
Navicat probablemente no use ADO y por eso no falla.

Un saludo

Re: Sacar imagen PNG de una tabla MySql

PostPosted: Wed Mar 15, 2017 3:55 pm
by Armando
Carlos:

Te agradezco infinitamente tu interés, efectivamente uso ADO
el problema no estaba en el tamaño, eso lo tengo contemplado.

El problema estaba en que para guardar la imagen, que por cierto
es más pequeña que un PDF, estaba utilizando el reemplazo
directo al campo de la tabla al estilo DBFs

Code: Select all  Expand view

    oRsFic:Fields("FIC_FOT"):Value := StrToHex(oFic:FOT)
    oRsFic:UpDate()
 


Al cambiar la forma de actualizar usando un comando de MySql

Code: Select all  Expand view

        cPdfFile := StrToHex(MemoRead(oFic:FOT))

        cCmdSql := "UPDATE " +;
                            "Fichas " +;
                        "SET " +;
                            "FIC_FOT = '" + cPdfFile + "'," +;
                            "FIC_EXT = '" + oFic:EXT + "' " +;
                        "WHERE " +;
                            "FIC_CUR = '" + oFic:CUR + "'"

 


Todo quedó bajo control.

Una vez más te agradezco tu atención y sugerencia.

Saludos

Re: Sacar imagen PNG de una tabla MySql (SOLUCIONADO)

PostPosted: Thu Mar 16, 2017 2:53 pm
by xmanuel
Has probado cambiar esto esto?

Code: Select all  Expand view


        oRsFic:Fields("FIC_FOT"):Value := StrToHex(oFic:FOT)
        oRsFic:UpDate()
     
 


Cambirlo a esto?

Code: Select all  Expand view


        oRsFic:Fields("FIC_FOT"):Value := StrToHex(MemoRead(oFic:FOT))
        oRsFic:UpDate()
     
 

Re: Sacar imagen PNG de una tabla MySql (SOLUCIONADO)

PostPosted: Thu Mar 16, 2017 4:32 pm
by Armando
xManuel:

También agradezco tu interés en mi problema, he probado tu
sugerencia quedando así:

Code: Select all  Expand view

    oRsFic:Fields("FIC_FOT"):Value := StrToHex(MemoRead(oFic:FOT))
    oRsFic:Fields("FIC_EXT"):Value := oFic:EXT
    oRsFic:UpDate()
 


Pero no hay de piña, no reclama nada simplemente al sacar la imagen
no la saca.

Saludos