mostrar imagen desde MARIAdb sin recordset...

mostrar imagen desde MARIAdb sin recordset...

Postby goosfancito » Tue Dec 17, 2019 9:20 am

Buen dia.
Tengo una tabla en mariadb y estoy usando tdolphin, necesito tomar el dato del campo que contiene la imagen y mostrarla en un control IMAGE

Code: Select all  Expand view  RUN
  ::oImagen:LoadFromMemory(::oQry:FieldGet("c19"))
   ::oImagen:refresh()
 


El campo de la tabla tiene datos, ya lo verifique. Pero me tira error:
Code: Select all  Expand view  RUN

 Error description: Error BASE/1004  Class: 'NIL' has no exported method: LOADFROMMEMORY
   Args:
     [   1] = U  
     [   2] = C   BM6’



que le erro?

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: mostrar imagen desde MARIAdb sin recordset...

Postby Adolfo » Tue Dec 17, 2019 11:47 am

Yo redefino el xImage asi

REDEFINE XIMAGE oImg SOURCE oRecordSet:FOTO ID 103 OF oFldPro:aDialogs[ 6 ] UPDATE

Pruebalo, funciona con tDolphin y FWMariaDb

Saludos...

EDIT : No me habia percatado que no querias tener un Recordset, sin embargo, solo traer un campo desde una tabla de Sql es en si un recordset.....
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Adolfo
 
Posts: 860
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: mostrar imagen desde MARIAdb sin recordset...

Postby EBM » Tue Dec 17, 2019 5:59 pm

Hola

Yo lo hago de la siguiente manera y me funciona perfecto:

oFoto := TBitMap():Define()

oFoto:LoadFromString( oQFotos:FieldGet( "ENTRADA" ) )

Espero te funcione

Saludos!

Eduardo Borondón Muñiz
EBM
 
Posts: 147
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: mostrar imagen desde MARIAdb sin recordset...

Postby goosfancito » Wed Dec 18, 2019 12:02 am

Podrias explicarme como haces el REDEFIne? porque intento hacerlo y sigo con el mismo problema:

Code: Select all  Expand view  RUN
  REDEFINE IMAGE ::oImagen ID 300 OF oDlg ADJUST update
   ::oImagen:LoadFromString( ::oQry:FieldGet("c19") )
   ::oImagen:refresh()

 


Tira este error:

Time from start: 0 hours 0 mins 28 secs
Error occurred at: 17/12/2019, 21:02:05
Error description: Error BASE/1004 Class: 'NIL' has no exported method: LOADFROMSTRING
Args:
[ 1] = U
[ 2] = C BM6’ 6 ( } l   Ž ˆ ˆ         

EBM wrote:Hola

Yo lo hago de la siguiente manera y me funciona perfecto:

oFoto := TBitMap():Define()

oFoto:LoadFromString( oQFotos:FieldGet( "ENTRADA" ) )

Espero te funcione

Saludos!

Eduardo Borondón Muñiz
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: mostrar imagen desde MARIAdb sin recordset...

Postby EBM » Wed Dec 18, 2019 5:23 pm

Hola

Te mando mi codigo tal cual lo estoy utilizando para visualizar las imagenes guardadas en una tabla MySql con TDolphin

Code: Select all  Expand view  RUN

////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNCTION ViewPict()
LOCAL oDlg, aGets[ 5 ], aBoton[ 2 ], oUser, oImage1, oImage2, oFontPass, cClave
LOCAL aFont[ 2 ], lValid := .f., dFecha, cEntrada, cSalida

DEFINE FONT aFont[ 1 ] NAME "Times New Roman" SIZE 0,-12

oUser     := Usuario():Init()
dFecha    := oPublic:oEmpresa:dFechaTrabajo
cEntrada  := cSalida := "00:00:00"
cClave    := Space( 8 )

DEFINE   DIALOG   oDlg                                                                                ;
         RESOURCE "VIEW_PICT"                                                                         ;
         TITLE    "Visualizador de fotos"                                                             ;
         OF       oPublic:oVentPrin                                                                   ;
         FONT     oPublic:oVentPrin:oFont

REDEFINE GET      aGets[ 3 ]                                                                          ;
         VAR      dFecha                                                                              ;
         ID       103                                                                                 ;
         FONT     oPublic:oFont                                                                       ;
         OF       oDlg                                                                                ;
         UPDATE                                                                                      

REDEFINE GET     aGets[ 1 ]                                                                           ;
         VAR     cClave                                                                               ;
         ID      101                                                                                  ;
         OF      oDlg                                                                                 ;
         PICTURE "@K!"                                                                                ;
         FONT    aFont[ 1 ]                                                                           ;
         VALID   ( cClave := ClaveUsu( cClave ), lValid := oUser:ClaveOK( cClave ),                   ;
                   LoadPict( @oUser, dFecha, @cEntrada, @cSalida, @oImage1, @oImage2 ),               ;
                   oDlg:Update(), aBoton[ 1 ]:SetFocus(), lValid )                                       ;
         UPDATE

REDEFINE GET     aGets[ 2 ]                                                                           ;
         VAR     oUser:cNombre                                                                        ;
         ID      102                                                                                  ;
         FONT    oPublic:oFont                                                                        ;
         WHEN    .F.                                                                                  ;
         OF      oDlg                                                                                 ;
         UPDATE

REDEFINE BITMAP   oImage1                                                                             ;
         ID       104                                                                                 ;
         OF       oDlg                                                                                ;
         ADJUST

REDEFINE BITMAP   oImage2                                                                             ;
         ID       105                                                                                 ;
         OF       oDlg                                                                                ;
         ADJUST

REDEFINE GET      aGets[ 4 ]                                                                          ;
         VAR      cEntrada                                                                            ;
         ID       106                                                                                 ;
         WHEN     .F.                                                                                 ;
         FONT     oPublic:oFont                                                                       ;
         OF       oDlg                                                                                ;
         UPDATE                                                                                      

REDEFINE GET      aGets[ 5 ]                                                                          ;
         VAR      cSalida                                                                             ;
         ID       107                                                                                 ;
         WHEN     .F.                                                                                 ;
         FONT     oPublic:oFont                                                                       ;
         OF       oDlg                                                                                ;
         UPDATE                                                                                      

REDEFINE BUTTON   aBoton[ 1 ]                                                                         ;
         ID       151                                                                                 ;
         OF       oDlg                                                                                ;
         WHEN     lValid                                                                              ;
         MESSAGE  "Nueva consulta"                                                                    ;
         ACTION   ( cEntrada := cSalida := "00:00:00", oImage1:Clear(), oImage2:Clear(), oUser:Init(),;
                    cClave   := Space( 8 ), oDlg:Update(), aGets[ 3 ]:SetFocus() )                    ;
         UPDATE

REDEFINE BUTTON   aBoton[ 2 ]                                                                         ;
         ID       152                                                                                 ;
         OF       oDlg                                                                                ;
         MESSAGE  "Salir"                                                                             ;
         CANCEL                                                                                       ;
         ACTION   ( oDlg:End() )                                                                      ;
         UPDATE

ACTIVATE DIALOG  oDlg CENTER                                                                          
         
AEval( aFont , { | Elem | Iif( Elem <> NIL, ( Elem:End(), DeleteObject( Elem ) ), .t. ) } )
         
aFont   := NIL        
oImage1 := NIL
oImage2 := NIL

Return NIL

/////////////////////////////////////////////////////////////////////////////////////////////////////
FUNCTION LoadPict( oUser, dFecha, cEntrada, cSalida, oImage1, oImage2 )
LOCAL oQuery, oQFotos, cConsulta , nRecno

// Checar si ya realizo algun movimiento en el dia el empleado
cConsulta := "SELECT RECNO, ENTRADA, SALIDA "                                                       + ;
             "FROM   asistencia   "                                                                 + ;
             "WHERE  EMPLEADO = '" + oUser:oEmpleado:cCodigo + "'  "                                + ;
             "AND    FECHA    = '" + DtoS( dFecha )          + "'  "                                + ;
             "AND    DELETED  = 'N' "                                                              
             
oQuery    := oPublic:oDoIt:oServer:Query( cConsulta )

If oQuery:nRecCount > 0
   nRecno   := oQuery:FieldGet( "RECNO" )
   cEntrada := oQuery:FieldGet( "ENTRADA" )
   cSalida  := oQuery:FieldGet( "SALIDA" )

  // Traigo las imagenes desde la tabla de imagenes
   cConsulta := "SELECT ENTRADA, SALIDA FROM fasistencia "                                           + ;
                "WHERE REGISTRO='" + Str( nRecno, 11 ) + "' "
                   
   oQFotos   := oPublic:oDoIt:oServer:Query( cConsulta )

   If oQFotos:nRecCount > 0
      oImage1:LoadFromString( HB_Base64Decode( oQFotos:FieldGet( "ENTRADA" ) ) )
      oImage2:LoadFromString( HB_Base64Decode( oQFotos:FieldGet( "SALIDA" ) ) )
    else
      oImage1:Clear()
      oImage2:Clear()
   EndIf  
EndIf
   
oImage1:Refresh()
oImage2:Refresh()

Return NIL
 


Espero te sirva, cualquier duda estoy a tus ordenes

Saludos!!

Eduardo Borondón Muñiz
EBM
 
Posts: 147
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: mostrar imagen desde MARIAdb sin recordset...

Postby goosfancito » Wed Dec 18, 2019 8:23 pm

Gracias.

Voy a probar a ver como sale.

en el Resource lo declaraste como un control "PICTURE"?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: mostrar imagen desde MARIAdb sin recordset...

Postby carlos vargas » Thu Dec 19, 2019 5:39 pm

umm, en mi caso particular yo cuando guardo la imagen en tabla lo que hago es lo siguiente:
  • define el campo en la tabla de mysql/mariadb es de tipo MEDIUMTEXT.
  • para guardar el archivo en la tabla, lo hago de la siguiente forma: oQry:ARCHIVO:= hb_StrToHex( FileStr( "c:\test\test.jpg" ) )
  • y para recuperarlo lo hago de la siguiente forma: MsgRun( "Guardando documento a archivo...", "Espere por favor", {|| nSize := StrFile( HB_HexToStr( oQryTmp:ARCHIVO ), cFileExtract ) } )
    en tu caso podrias usarlo ::oImagen:LoadFromString( HB_HexToStr( oQryTmp:ARCHIVO ) )

En mi caso convierto la cadena regresada por StrFile y lo paso a hexadecimal lo cual duplica en tabla en tamaño del archivo a guardar, si el archivo es de 10k, ya en tabla son 20k,
en algunas ocasiones experimente en en convertir a base64 y ahi el incremento es del 50% por lo que 10k pasa a ser como 15k, pero note como que tomaba mas tiempo. (en este caso uso las funciones HB_Base64Encode y HB_Base64DecodeE en lugar de hb_StrToHex yHB_HexToStr)
En tu caso el mensaje de errror es que el objeto ::oImagen no esta creado, esa variable tiene un valor de NIL y por lo tanto no tiene definido ningún método, ten en cuenta que ese comando de definición se debe crear tal como esta definido en el ch, tambien se da la particularidad que ese comando en fivewin esta definido en dos lugares.... ???? Antonio hay que ver si esto es necesario o eliminar uno de ellos.

image.ch
Code: Select all  Expand view  RUN

#xcommand REDEFINE Image [ <oBmp> ] ;
             [ ID <nId> ] ;
             [ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
             [ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
             [ <file: FILE, FILENAME, DISK> <cBmpFile> ] ;
             [ <lClick: ON ClICK, ON LEFT CLICK> <uLClick> ] ;
             [ <rClick: ON RIGHT CLICK> <uRClick> ] ;
             [ <scroll: SCROLL> ] ;
             [ <adjust: ADJUST> ] ;
             [ CURSOR <oCursor> ] ;
             [ MESSAGE <cMsg>   ] ;
             [ <update: UPDATE> ] ;
             [ WHEN <uWhen> ] ;
             [ VALID <uValid> ] ;
       => ;
          [ <oBmp> := ] TImage():ReDefine( <nId>, <cResName>, <cBmpFile>,;
             <oWnd>, [\{ |nRow,nCol,nKeyFlags| <uLClick> \}],;
                     [\{ |nRow,nCol,nKeyFlags| <uRClick> \}],;
             <.scroll.>, <.adjust.>, <oCursor>, <cMsg>, <.update.>,;
             <{uWhen}>, <{uValid}> )
 


fivewin.ch
Code: Select all  Expand view  RUN

#xcommand REDEFINE IMAGE [ <oBmp> ] ;
             [ ID <nId> ] ;
             [ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
             [ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
             [ <file: FILE, FILENAME, DISK> <cBmpFile> ] ;
             [ <lClick: ON ClICK, ON LEFT CLICK> <uLClick> ] ;
             [ <rClick: ON RIGHT CLICK> <uRClick> ] ;
             [ <scroll: SCROLL> ] ;
             [ <adjust: ADJUST> ] ;
             [ CURSOR <oCursor> ] ;
             [ MESSAGE <cMsg>   ] ;
             [ <update: UPDATE> ] ;
             [ WHEN <uWhen> ] ;
             [ VALID <uValid> ] ;
             [ <transparent: TRANSPARENT> ] ;
       => ;
          [ <oBmp> := ] TImage():ReDefine( <nId>, <cResName>, <cBmpFile>,;
             <oWnd>, [\{ |nRow,nCol,nKeyFlags| <uLClick> \}],;
                     [\{ |nRow,nCol,nKeyFlags| <uRClick> \}],;
             <.scroll.>, <.adjust.>, <oCursor>, <cMsg>, <.update.>,;
             <{uWhen}>, <{uValid}>, <.transparent.> )
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: mostrar imagen desde MARIAdb sin recordset...

Postby acuellar » Sat Dec 21, 2019 3:43 pm

goosfancito

La imágen se puede grabar en un campo BLOB o MEDIUMTEXT depende del tamaño

Con BLOB se guarda asi:
Code: Select all  Expand view  RUN

cFOTO:= cGetFile( "JPG (*.jpg)| *.jpg|" +"PNG (*.png)| *.png|","Por Favor Seleccione la foto" , "C:\SISTEMAS\RRHH\FOTOS" )
oSQL:FOTO:=HB_MemoRead(cFoto)
 


Con MEDIUMTEXT
Code: Select all  Expand view  RUN

   BLOBImport( FieldPos( "FOTO" ),cFoto )
 


Para recuperar:
oFoto:SetBmp(FOTO)


Para mostrar:
Code: Select all  Expand view  RUN

 
 REDEFINE XIMAGE oFoto ID 118 OF oDlg SOURCE oEMPL:FOTO UPDATE

o

  REDEFINE BITMAP oFoto ID 118 OF oDlg NOBORDER ADJUST
 
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1644
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot], wmormar and 62 guests