Referencia a una data

Referencia a una data

Postby ricardog » Thu Mar 18, 2021 6: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
ricardog
 
Posts: 158
Joined: Tue Oct 11, 2005 3:10 pm

Re: Referencia a una data

Postby xmanuel » Thu Mar 18, 2021 7: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
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Referencia a una data

Postby ricardog » Thu Mar 18, 2021 7:27 pm

Gracias xmanuel, a ver si me doy a entender:
EN MI PRG
Code: Select all  Expand view  RUN
/* -------------------------------------------------------------------------------------------
   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: Select all  Expand view  RUN
/*
   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)
ricardog
 
Posts: 158
Joined: Tue Oct 11, 2005 3:10 pm

Re: Referencia a una data

Postby xmanuel » Thu Mar 18, 2021 7: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
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Referencia a una data

Postby ricardog » Thu Mar 18, 2021 8:06 pm

Compañeros, SOLUCIONADO.

Muchas gracias.
ricardog
 
Posts: 158
Joined: Tue Oct 11, 2005 3:10 pm

Re: Referencia a una data

Postby ricardog » Thu Mar 18, 2021 8:18 pm

Lo solucione de la siguiente manera
Code: Select all  Expand view  RUN
/*
   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. :D :D
ricardog
 
Posts: 158
Joined: Tue Oct 11, 2005 3:10 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Adolfo and 80 guests