Saludos,
Podrian ayudarme como reemplazar con equivalencias estos metodos a nivel de hash en harbour ?
Gracias de antemano
Equivalencias de __objAddData y __objSendMsg en Hash
Equivalencias de __objAddData y __objSendMsg en Hash
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
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Re: Equivalencias de __objAddData y __objSendMsg en Hash
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 _ mediante
METHOD InitFields() CLASS Ttable
AEVAL(::aFields,{|a,n| __objAddData( Self, a[1] , CTOEMPTY(NIL,a[2],a[3] ) ) })
Ahora _ me devuelve valores NIL
Colega
También tengo la misma situación, asigno valores de forma dinámica, desde un cursor SQL bien sea TODBC o EAGLE creo _ mediante
METHOD InitFields() CLASS Ttable
AEVAL(::aFields,{|a,n| __objAddData( Self, a[1] , CTOEMPTY(NIL,a[2],a[3] ) ) })
Ahora _ me devuelve valores NIL
- carlos vargas
- Posts: 1721
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Equivalencias de __objAddData y __objSendMsg en Hash
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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
Re: Equivalencias de __objAddData y __objSendMsg en Hash
Yo uso esto Carlos:
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
Espero que te valga Carlos....
Pero eso no creo que sea lo que piden ellos. Aún así se encontrará con ese problema.
Code: Select all | Expand
//------------------------------------------------------------------------------
// 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 ) )
//------------------------------------------------------------------------------
Realmente forma parte de este otro código que use en TDbf y en otros proyectos mios como HDO
Code: Select all | Expand
/*
* 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 ) )
//------------------------------------------------------------------------------
Pero eso no creo que sea lo que piden ellos. Aún así se encontrará con ese problema.
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
- carlos vargas
- Posts: 1721
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Equivalencias de __objAddData y __objSendMsg en Hash
Gracias, manuel, como siempre compartiendo gotas de saber.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
Carlos Vargas
Desde Managua, Nicaragua (CA)