Equivalencias de __objAddData y __objSendMsg en Hash

Equivalencias de __objAddData y __objSendMsg en Hash

Postby Compuin » Fri Mar 17, 2023 2:45 pm

Saludos,

Podrian ayudarme como reemplazar con equivalencias estos metodos a nivel de hash en harbour ?

Gracias de antemano
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Equivalencias de __objAddData y __objSendMsg en Hash

Postby jnavas » Fri Mar 17, 2023 3:29 pm

Saludos
Colega
También tengo la misma situación, asigno valores de forma dinámica, desde un cursor SQL bien sea TODBC o EAGLE creo los campos mediante

METHOD InitFields() CLASS Ttable

AEVAL(::aFields,{|a,n| __objAddData( Self, a[1] , CTOEMPTY(NIL,a[2],a[3] ) ) })

Ahora los campos me devuelve valores NIL
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Equivalencias de __objAddData y __objSendMsg en Hash

Postby carlos vargas » Mon Mar 20, 2023 6:09 pm

Estimados, yo quise hacer esto con una clase sqlmix, pero el caso es que los datas que creaba por cada campo, se mantenian entre clases, dado que la creacion se hacia a nivel objeto por lo que el numero de campos se incrementaba por cada instancia del objeto table, lo han resuelto?
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Equivalencias de __objAddData y __objSendMsg en Hash

Postby xmanuel » Thu Mar 23, 2023 7:04 am

Yo uso esto Carlos:

Code: Select all  Expand view

//------------------------------------------------------------------------------
// Generador de clases dinamicas funciona como una metaclase.
// Con control de referencias.

static function myGenClass( cClsName, cSuperClsName )

    static s__aClassH := {}
    local n, __nClassH, __oDb

    if Hb_IsString( cClsName )
        cClsName := Upper( Alltrim( cClsName ) )
    else
        cClsName := "THDOTABLE" + Hb_NToS( Len( s__aClassH ) )
    endif

    if ( n := AScan( s__aClassH, { | aClass | aClass[ 1 ] == cClsName } ) ) == 0
        _HB_CLASS cClsName
        __oDb := HBClass():New( cClsName, cSuperClsName )
        __oDb:Create()
        __nClassH := __oDb:hClass
        AAdd( s__aClassH, { cClsName, __nClassH } )
    else
        __nClassH := s__aClassH[ n, 2 ]
    endif

return( __clsInst( __nClassH ) )

//------------------------------------------------------------------------------
 


Es una funcion que crea objetos controlando si ya existe previamente...

Realmente forma parte de este otro código que use en TDbf y en otros proyectos mios como HDO

Code: Select all  Expand view

/*
 * Proyecto: hdo_general
 * Fichero: hdodynclass.prg
 * Descripción:  Gestión clases y datas dinamicas
 * Autor: Manu Exposito 2014-21
 * Fecha: 05/02/2021
 */

//------------------------------------------------------------------------------

#include "hdotable.ch"

//------------------------------------------------------------------------------
// Funcion de clase. Genera clases derivadas de THDOVTable

function THDOFTable( cClsName )
return myGenClass( cClsName, "THDOVTABLE" )

//------------------------------------------------------------------------------
// Meta-clase derivada de THDOTable especializada en crear DataFields

CLASS THDOVTable FROM THDOTable

    DATA lGenDataField INIT .t.     // Crea DataFields?

    METHOD genDataFields()
    METHOD genDataField( cName )

    METHOD load()                   // Sobrecribe load para creacion de DataFields
    MESSAGE open() METHOD load()

ENDCLASS

//------------------------------------------------------------------------------
// Metodo apertura/carga de datos de la tabla

METHOD load() CLASS THDOVTable

    local lRet := ::Super:Open()

    if lRet .and. ::lGenDataField
        ::genDataFields()
        ::lGenDataField := .f.
    endif

return( lRet )

//------------------------------------------------------------------------------
// Genera todas las DataFields de un objeto derivado de TMSTable especializada

procedure genDataFields() CLASS THDOVTable

    local cDataFieldName

    for each cDataFieldName in ::aColumnNames
        ::genDataField( cDataFieldName )
    next

return

//------------------------------------------------------------------------------
// Generador de DataField dinamicas

procedure genDataField( cName ) CLASS THDOVTable

    __clsAddMsg( ::ClassH, cName, { | self | ::bufferGet( cName ) }, HB_OO_MSG_INLINE )
    __clsAddMsg( ::ClassH, "_" + cName, { | self, Val | ::bufferPut( cName, Val ) }, HB_OO_MSG_INLINE )

return

//------------------------------------------------------------------------------
// Generador de clases dinamicas funciona como una metaclase.
// Con control de referencias.

static function myGenClass( cClsName, cSuperClsName )

    static s__aClassH := {}
    local n, __nClassH, __oDb

    if Hb_IsString( cClsName )
        cClsName := Upper( Alltrim( cClsName ) )
    else
        cClsName := "THDOTABLE" + Hb_NToS( Len( s__aClassH ) )
    endif

    if ( n := AScan( s__aClassH, { | aClass | aClass[ 1 ] == cClsName } ) ) == 0
        _HB_CLASS cClsName
        __oDb := HBClass():New( cClsName, cSuperClsName )
        __oDb:Create()
        __nClassH := __oDb:hClass
        AAdd( s__aClassH, { cClsName, __nClassH } )
    else
        __nClassH := s__aClassH[ n, 2 ]
    endif

return( __clsInst( __nClassH ) )

//------------------------------------------------------------------------------
 


Espero que te valga Carlos....

:D

Pero eso no creo que sea lo que piden ellos. Aún así se encontrará con ese problema.
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Equivalencias de __objAddData y __objSendMsg en Hash

Postby carlos vargas » Thu Mar 23, 2023 3:47 pm

Gracias, manuel, como siempre compartiendo gotas de saber.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 89 guests