FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Referencia a una data
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Referencia a una data
Posted: Thu Mar 18, 2021 06:45 PM

Buenas tardes.
Compañeros, declaro una DATA en mi clases con el comando __objAddData( Self, "oRs" + oTable:cFile ),
Como puedo (dentro del mismo method donde la declaro) hacer referencia a ella (ya como data de la clase) ?

Muchas Gracias

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Referencia a una data
Posted: Thu Mar 18, 2021 07:01 PM

Hola Ricardo.
Tu data está basada en una variable con el nombre formado por "oRs" + oTable:cFile
Eso es complicado de trata directamente el el método pero para ello tendrías que usar macros.
Por otro lado me aventuro a afirmar sin ver todo el código que estás creando data a la clase y no al objeto. Con eso quiero decir que si defines otro objeto de la clase tendrá incluidas todas las datas.
Para poder ayudarte tendrías que poner más código!!!

______________________________________________________________________________

Sevilla - Andalucía
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Referencia a una data
Posted: Thu Mar 18, 2021 07:27 PM
Gracias xmanuel, a ver si me doy a entender:
EN MI PRG
Code (fw): Select all Collapse
/* -------------------------------------------------------------------------------------------
   Gestión de pedidos desde whatsapp o excel
------------------------------------------------------------------------------------------- */
FUNCTION CXC_Pedidosw()
   LOCAL mPedidos

   DEFINE MAINT mPedidos MASTER TEncdoc() ;
          Select "select * from encdoc where numtran = 105 order by folio desc" ;
          DESCRIPTION "Pedidos de WhatsApp" ;
          SCREEN Captura(mPedidos) BARRA {||MantBarra(mPedidos)} FROMCODE

          ADD TABLE TProductos() TO mPedidos                                                             //Llama al metodo Addtable de la clase TMAINT
          ADD TABLE TItemDoc() SELECT "select * from itemdoc where numtran = 105 " TO mPedidos    //Llama al metodo Addtable de la clase TMAINT

   ACTIVATE MAINT mPedidos AL BUSCAR { |nKey| TeclaCual( nKey, mPedidos ) } ;
                           ON INIT { || mPedidos:oMaster:aTField[09]:cHeader:="Fecha;Entrega",;
                                        mPedidos:oMaster:aTField[09]:lInList:=.T.}


   //AL BUSCAR { |nKey| Filtro(mPedidos,nKey)  }
   //

   mPedidos:END()

RETURN NIL

  STATIC FUNCTION CAPTURA(m)

  Código de catptura de datos que se define en el SCREEN Captura(mPedidos)  y se activa en el ACTIVATE (de arriba)

  //Dentro de esta funcion, si puedo hacer lo siguiente:

         oRsItemdoc := m:oConn:Query("select * from itemdoc where numtran = 105")       

 //Pero quiero hacerlo desde la clase, cuando entre al ADDTABLE
 //CON EL 
     ADD TABLE TItemDoc() SELECT "select * from itemdoc where numtran = 105 " TO mPedidos 
 //DEL DEFINE DEL MANTENIMIENTO

RETURN nil


y En la clase
Code (fw): Select all Collapse
/*
   Genero la DATA en TMAINT
*/
METHOD AddTable( oTable, cSelect ) CLASS TMaint
   LOCAL o, n:=0

    FAIL IF TYPE oTable  NOT A TTABLEMY  DESCR "El objeto oTable no es del tipo requerido. " + CRLF + "Funcion: "  + ProcName()

    DEFAULT cSelect TO ''

    Aadd( ::aTables, oTable) //TTableMy():New(oTable:cFile, oTable:cDescrip, oTable:cFldInc, oTable:bInicio) )

         //Agrego una DATA OBJECT "TABLA", en el mantenimiento actual
         __objAddData( Self, "ors" + oTable:cFile )         
  
      //Con este codigo le puedo "poner" el objeto tabla ??? O como puedo hacerlo ???
      __objSendMsg( Self, "oRs" + oTable:cFile, oSys:oConn:Query( cSelect ) )
 

Return NIL


Desde el PRG (declarado arriba)
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Referencia a una data
Posted: Thu Mar 18, 2021 07:45 PM

Creo que ya te entiendo!!!
En vez de esto:
__objSendMsg( Self, "oRs" + oTable:cFile, oSys:oConn:Query( cSelect ) )

pon esto
__objSendMsg( Self, "_oRs" + oTable:cFile, oSys:oConn:Query( cSelect ) )

______________________________________________________________________________

Sevilla - Andalucía
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Referencia a una data
Posted: Thu Mar 18, 2021 08:06 PM

Compañeros, SOLUCIONADO.

Muchas gracias.

Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Referencia a una data
Posted: Thu Mar 18, 2021 08:18 PM
Lo solucione de la siguiente manera
Code (fw): Select all Collapse
/*
   Genero la DATA en TMAINT
*/
METHOD AddTable( oTable, cSelect ) CLASS TMaint
   LOCAL o, n:=0

    FAIL IF TYPE oTable  NOT A TTABLEMY  DESCR "El objeto oTable no es del tipo requerido. " + CRLF + "Funcion: "  + ProcName()

    DEFAULT cSelect TO ''

    Aadd( ::aTables, oTable) //TTableMy():New(oTable:cFile, oTable:cDescrip, oTable:cFldInc, oTable:bInicio) )

         //Agregon una DATA OBJECT "TABLA", en el mantenimiento actual
         __objAddData( Self, "ors" + oTable:cFile )

        IF !Empty(cSelect)                                            //Si el select no es vacio entonces
           o:=::GetTable(oTable)                                      //Busco el objeto oTABLE enviado, en el ARRAY aTables de esta clase
           o := oSys:oConn:Query( cSelect )                           //Le asigno el query a ese objeto
           __objSendMsg( Self, "oRs" + oTable:cFile, o )              //Le asigono el objeto  TABLE que me regresa el QUERY de TMYSQL
                                                                      //y listo, ya tengo en la DATA oRSXXXX, la tabla que requiero
        ENDIF

Return NIL

/* -----------------------------------------------------
       Method GetTable(oT)
       Regresa un objeto tabla del tMaint, para su uso
    ------------------------------------------------------*/
METHOD GetTable( oTable ) CLASS TMaint
   local aTables:=::aTables,nTable:=0

     FAIL IF TYPE oTable  NOT A TTABLEMY DESCR "El objeto oTable no es del tipo requerido. " + CRLF + "Funcion: "  + ProcName()

     nTable:=Ascan( ::atables, {|t| t:cFile == oTable:cfile } )

    // ?ntable,"ntable"
    // ?aTables[ntable]:cfile,"del ascan"

RETURN iif( nTable == 0, NIL, ::aTables[ nTable ] )


Muchas gracias. :-) :-)

Continue the discussion