Saludos,
Podrian ayudarme como reemplazar con equivalencias estos metodos a nivel de hash en harbour ?
Gracias de antemano
FWH 25.12
Harbour/Hbmk2
Microsoft Visual C++
MySql 8.0
Antigravity
Saludos,
Podrian ayudarme como reemplazar con equivalencias estos metodos a nivel de hash en harbour ?
Gracias de antemano
FWH 25.12
Harbour/Hbmk2
Microsoft Visual C++
MySql 8.0
Antigravity
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
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?
//------------------------------------------------------------------------------
// 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 ) )
//------------------------------------------------------------------------------/*
聽* 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 ) )
//------------------------------------------------------------------------------Gracias, manuel, como siempre compartiendo gotas de saber.