mostrar imagen desde MARIAdb sin recordset...

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

mostrar imagen desde MARIAdb sin recordset...

Post by goosfancito »

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

   ::oImagen:LoadFromMemory(::oQry:FieldGet("c19"))
   ::oImagen:refresh()
 
El campo de la tabla tiene datos, ya lo verifique. Pero me tira error:

Code: Select all

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

que le erro?

gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
Adolfo
Posts: 815
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Re: mostrar imagen desde MARIAdb sin recordset...

Post by Adolfo »

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
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
EBM
Posts: 123
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: mostrar imagen desde MARIAdb sin recordset...

Post by EBM »

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
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: mostrar imagen desde MARIAdb sin recordset...

Post by goosfancito »

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

Code: Select all

   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
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
EBM
Posts: 123
Joined: Tue Oct 11, 2005 8:22 pm
Location: Guadalajara, Jal Mexico

Re: mostrar imagen desde MARIAdb sin recordset...

Post by EBM »

Hola

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

Code: Select all

////////////////////////////////////////////////////////////////////////////////////////////////////////
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
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: mostrar imagen desde MARIAdb sin recordset...

Post by goosfancito »

Gracias.

Voy a probar a ver como sale.

en el Resource lo declaraste como un control "PICTURE"?
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: mostrar imagen desde MARIAdb sin recordset...

Post by carlos vargas »

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

#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

#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
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: mostrar imagen desde MARIAdb sin recordset...

Post by acuellar »

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

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

   BLOBImport( FieldPos( "FOTO" ),cFoto )
 
Para recuperar:
oFoto:SetBmp(FOTO)
Para mostrar:

Code: Select all

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

o

  REDEFINE BITMAP oFoto ID 118 OF oDlg NOBORDER ADJUST 
 
Saludos,

Adhemar C.
Post Reply