Page 1 of 1

Grabar un objeto

Posted: Tue Jul 04, 2017 4:34 pm
by infosys
Es posible grabar un objeto y sus propiedades en un archivo o en una campo de tabla sql server o cualquier otra ?, por ejemplo hago un grafico estadistico con chart de owc, el operador lo modifica visualmente y quiero que _ queden grabados para recuperarlos en otro momento y mostrar nuevamente el grafico con las modificaciones s
realizadas.
Les agradecería si alguien puede orientarme al respecto.

Saludos

Re: Grabar un objeto

Posted: Tue Jul 04, 2017 4:41 pm
by Carles
Hoa,

Repasa la clase fwdbg.prg -> function Object2Data( o )

Re: Grabar un objeto

Posted: Tue Jul 04, 2017 5:02 pm
by infosys
Carles, gracias por la información, veo que hay opciones, el problema es que en mi version de fivewin no tengo ese codigo, es posible publicarlo aqui ?

Re: Grabar un objeto

Posted: Tue Jul 04, 2017 5:07 pm
by Carles
Hola,

Si se lo pides al Sr. Linares seguro que te la envia...

Re: Grabar un objeto

Posted: Thu Jul 06, 2017 9:25 am
by Antonio Linares
Desarrollado por nuestro querido Carles, menuda barba te has dejado! :-)

Code: Select all

FUNCTION Object2Data( oObject )
*-------------------------------------
    LOCAL aDict := {}
    LOCAL aIVar := {}
    LOCAL bError, oError
    LOCAL cx
    LOCAL uData
    LOCAL nLen

    IF ValType( oObject ) <> 'O'
       RETU aIVar
    ENDIF

    nLen   := Len( aDict := ASort( __ClassSel( oObject:ClassH )))
    bError := ErrorBlock( {|oError| ErrorObject( oError )} )

    BEGIN SEQUENCE

        FOR cx = 1 TO nLen

          IF !( StrChar( aDict[cx], 1) == '_')  // !Method

             IF Ascan( aDict, Left( "_" + aDict[cx], 10 ) ) == 0

*                 AADD( aMeth, aDict[cx] + '()'  )

               ELSE  // Var

                uData := OSend( oObject, aDict[cx] )

                Aadd( aIvar, { aDict[cx], ValType( uData ), uData, oObject } )

             ENDIF
     
          ENDIF

        NEXT

      RECOVER USING oError

           Eval( bError, oError )

    END SEQUENCE

    ErrorBlock( bError )

    IF Len( aIvar ) == 0
       Aadd( aIvar, { "No DATA", "", "" } )
    ENDIF

RETU aIVar
 

Re: Grabar un objeto

Posted: Thu Jul 06, 2017 11:33 am
by hmpaquito
Harbour, ese gran desconocido, tiene dos funciones a tal fin:

hb_Serialize() y hb_Deserialize()

Code: Select all

   HB_SERIALIZE( <xData>, [ <lNumSizes> = .F. ], ; 
                 [ <cCdpIn> = HVMCP ], [ <cCdpOut> = HVMCP ] ) -> cData 
   HB_DESERIALIZE( <cData>, ; 
                   [ <cCdpIn> = HVMCP ], [ <cCdpOut> = HVMCP ] ) -> xData