Algún browse maestro - exclavo para NTX?

Post Reply
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Algún browse maestro - exclavo para NTX?

Post by triumvirato »

Necesito saber si hay algún tipo de browse que permita trabajar como maestro-exclavo pero con índices NTX. Los que llevo vistos hasta ahora son para CDX.

Muchas gracias! Saludos!
User avatar
ADBLANCO
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

Re: Algún browse maestro - exclavo para NTX?

Post by ADBLANCO »

TODO DEPENDE COMO ABRAS LA TABLA,
SI UTILIZAS INDICES NTX DE TODAS FORMAS TRABAJARÁ EL OBJETO BROWSE
EL ORDEN DE LA INFORMACIÓN VA A DEPENDER DE CUAL DE LOS .NTX TENGAS APUNTADO EN ESE MOMENTO
SET INDEX TO IND1,IND2,IND3 // INDICES NTX
O
SET ORDER TO 1
Saludos

Angel, Valencia, Venezuela

xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Algún browse maestro - exclavo para NTX?

Post by triumvirato »

ADBLANCO,

Perdoname pero no entiendo muy bien tu explicación... He abierto sin problemas browses con bases de datos con índices NTX sin problemas, cambiando los índices, etc. pero lo que busco es (y quizás es que no me explicado bien) un doble browse, que al moverse por el maestro, me actualice el browse exclavo, un maestro - detalle creo que así se le denomina mejor. Pero eso sí, que me funcione con índices NTX, porque lo que he encontrado hasta ahora es para CDX.

Gracias y un saludo.
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Algún browse maestro - exclavo para NTX?

Post by acuellar »

Triumvirato

Es asi:
USE nombase VIA "DBFNTX" ...

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
ADBLANCO
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

Re: Algún browse maestro - exclavo para NTX?

Post by ADBLANCO »

Esto hace lo que tu dices:
Espero que te sirva de ejemplo

Code: Select all


    REDEFINE LISTBOX oLbx ;
             FIELDS TRANSFORM(TMPLIMIT->F_INICIO,'99/99/9999')  ,;
                    TRANSFORM(TMPLIMIT->F_FINAL,'99/99/9999')   ,;
                    TMPLIMIT->VERSION+CRLF                      ,;
                    TRANSFORM(TMPLIMIT->LIMITE,'999,999,999.99'),;
                    IIF(TMPLIMIT->FLK_ACTIVO,'Activo','Inactivo');
             FIELDSIZES 75,75,95,105,95,95;
             MESSAGE "Seleccione Versión/Límite/Vigencia ([Enter] o Doble Click => Modificar),(F2 - Incluir Nueva Versión/Limite/Vigencia)";
             HEADERS "Desde","Hasta","Version","Monto Limite","Estatus" ID 401 OF oDlg ;
             WHEN lEdit .and. lMod
    bModiPlan      := {|| modi_plan(oDlg,cRamo,nRamo,cPlan,nPlan,TMPLIMIT->IntId),oLbx:setfocus(.t.) }
    oLbx:cAlias    := "tmplimit"
    oLbx:bldblClick:= {|| EVAL(bModiPlan) }
    oLbx:nFreeze   :=  5   && Congela hasta la Quinta columna
    oLbx:bKeyDown  := {|nKey| IIF(nKey==VK_RETURN,EVAL(bModiPlan),),;
                                 Carga_CobTmp(cPlan,TMPLIMIT->IntId,oLbx2),;
                                 oLbx:Click(),;
                                 oLbx:SetFocus(.t.)}
    oLbx:bChange   := {||  Carga_CobTmp(cPlan,TMPLIMIT->IntId,oLbx2),;
                                 oLbx:Click(),;
                                 oLbx:SetFocus(.t.)}
    oLbx:nHeaderHeight := 31  && Da la altura del header
    oLbx:Set3DStyle()
    oLbx:Ajustify  := {0,0,0,1,0}
    oLbx:bGotFocus := {|| IIF(TMPLIMIT->(RECCOUNT())>0,(oButMod:Enable(),oButMod:lActive:=.t.),oButMod:Disable()),;
               oButMod:bAction:={|| EVAL(bModiPlan) },;
              oButMod:cMsg:="Modificar Versión/Límite/Vigencia Seleccionada de la Lista",;
                          oSay1:Show()            ,;
                          oButDupli:Enable()      ,;
                          oButDupli:Enable()      ,;
                          oButDupli:cMsg:="Duplicar Esta Versión/Límite/Vigencia",;
                          bButDupli:={|| EVAL(bDupLimite)},;
                          oButActiva:Enable()     ,;
                          oButActiva:lActive:=.t. ,;
                          oButActiva:cMsg:="Activar/Desactivar Versión",;
                          bButActiva :={|| EVAL(bActivLimit)},;
                          oButInserta:Enable()    ,;
                          oButInserta:lActive:=.t.,;
                          EVAL(bSay2)             ,;
                          bButInserta:={|| EVAL(bInsLimite)},;
                          oButInserta:cMsg:="Incluir Nueva Versión/Límite/Vigencia a la Lista",;
                          oButElim:Enable()       ,;
                          oButElim:lActive:=.t.   ,;
                          bButElim:={|| EVAL(bElimLimite)},;
                          oButElim:cMsg:="Eliminar Versión/Límite/Vigencia a la Lista",;
                          oButListar:lActive:=.t. ,;
                          oButListar:Enable()}
    REDEFINE LISTBOX oLbx2 ;
             FIELDS TMPCOBER->COBERTURA;
             FIELDSIZES 300;
             HEADERS "Cobertura" ID 402 OF oDlg ;
             WHEN .f. //lEdit .and. lMod
    oLbx2:cAlias       :="tmpcober"
    oLbx2:nHeaderHeight:= 31  && Da la altura del header
    oLbx2:Set3DStyle()
    oLbx2:Ajustify:={0}
    oLbx2:lDrawSelect  :=.f.





 
y auque está hecho para sql, las tablas están en dbf

Code: Select all

******************************************************************************************
STATIC FUNCTION CARGA_COBTMP(cPlan,nPlanVigencia,oLbx2)
******************************************************************************************
LOCAL oQuery                ,;
      bSeek                 ,;
      xPlan:=alltrim(cPlan) ,;
      nPlan:=len(xPlan)     ,;
      lOk:=.f.

  TMPCOBER->(DBZAP())  // INICIALIZO ARCHIVO TEMPORAL DE TIPOS DE COBERTURA
  IF nPlanVigencia>0
    bSeek:={||'SELECT '+cDTBase+'.DtsCobertura.VchDescripcion,'+;
                        cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsPlanVigenciaCobertura,'+;
                        cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsCobertura,'+;
                        cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsSubCobertura '+;
                'FROM '+cDTBase+'.DtsPlan '+;
          'INNER JOIN '+cDTBase+'.DtsPlanVigencia ON ('+cDTBase+'.DtsPlan.IntIdDtsPlan = '+cDTBase+'.DtsPlanVigencia.IntIdDtsPlan) '+;
          'INNER JOIN '+cDTBase+'.DtsPlanVigenciaCobertura ON ('+cDTBase+'.DtsPlanVigencia.IntIdDtsPlanVigencia = '+cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsPlanVigencia) '+;
          'INNER JOIN '+cDTBase+'.DtsCobertura ON ('+cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsCobertura = '+cDTBase+'.DtsCobertura.IntIdDtsCobertura) '+;
               'WHERE '+cDTBase+'.DtsPlan.VchDescripcion = "'+xPlan+SPACE(30-nPlan)+'"'+;
                ' AND '+cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsPlanVigencia = '+str(nPlanVigencia,10,0)+;
                ' AND '+cDTBase+'.DtsPlan.TinStatus <> 0'+;
                ' AND '+cDTBase+'.DtsPlanVigenciaCobertura.TinStatus <> 0'+;
           ' ORDER BY '+cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsCobertura,'+;
                       +cDTBase+'.DtsPlanVigenciaCobertura.IntIdDtsSubCobertura'}
    oQuery    :=TMSQuery():New( oDTbase )                                  // inicializa la clase
    oQuery:Open( eval(bSeek) )                                             // efectua el query
    IF ( oQuery:nRowCount>0 )                                              // Si Existe Data
      DO WHILE !oQuery:lEof
        TMPCOBER->(DBAPPEND())
        TMPCOBER->COBERTURA:=oQuery:Xfieldget(1)
        TMPCOBER->IntId    :=oQuery:Xfieldget(2)
        TMPCOBER->COBERT   :=oQuery:Xfieldget(3)
        TMPCOBER->SUBCOBERT:=oQuery:Xfieldget(4)
        IF TMPCOBER->SUBCOBERT>0
          TMPCOBER->COBERTURA:=' - '+DtsSubCobertura(TMPCOBER->SUBCOBERT)
        ENDIF
        oQuery:Fetch()
      ENDDO
      lOk  :=.t.
    ENDIF
    oQuery:Close()
    TMPCOBER->(DBGOTOP())
  ENDIF
  oLbx2:Refresh()
  RETURN lOk

 
Saludos

Angel, Valencia, Venezuela

xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Algún browse maestro - exclavo para NTX?

Post by triumvirato »

acuellar wrote:Triumvirato

Es asi:
USE nombase VIA "DBFNTX" ...

Saludos

Adhemar

Adhemar,

Muchas gracias por tu nota, en efecto la apertura de la base de datos sí la tenía clara, lo que no sabía (y aún no tengo muy claro) es cómo a la par que me muevo pro un browse, hacer que se actualice el otro, creo que el ejemplo de ADBLANCO es lo que busco. No obstante, muchas gracias de nuevo.

Saludos!
User avatar
Alfredo Arteaga
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico
Contact:

Re: Algún browse maestro - exclavo para NTX?

Post by Alfredo Arteaga »

He aquí las funciones que usé mucho tiempo para trabajar con mi viejo Clipper. Estas simulan el comportamiento de SCOPE con NTX y funcionan!

Code: Select all

// --- Redefinici¢n de Movimiento en Browse, Scope para NTX ------

// oBrw:bGoTop    :={||  GoToTop(cAlias,cKey)}
// oBrw:bGoBottom :={||  GoToBot(cAlias,cKey)}
// oBrw:bSkip     :={|n| MovePtr(cAlias,cKey,n)}


FUNCTION GoToTop(cAlias,cKey)
   DbSelectArea(cAlias)
   (cAlias)->(DbSeek(cKey))
RETURN (NIL)

FUNCTION GoToBot(cAlias,cKey)
   LOCAL cTem:=STUFF(cKey,Len(cKey),1,Chr(Asc(Right(cKey,1))+1))
   DbSelectArea(cAlias)
   (cAlias)->(DbSeek(cTem,.T.))
   (cAlias)->(DbSkip(-1))
   IF &((cAlias)->(IndexKey(0)))=cKey
      (cAlias)->(DbSkip(0))
   ELSE
      (cAlias)->(DbSeek(cKey))
   ENDIF
RETURN (NIL)

FUNCTION MovePtr(cAlias,cKey,nReg)
   LOCAL nNext:=0
   DbSelectArea(cAlias)
   IF nReg=0 .OR. (cAlias)->(LastRec())=0 .OR. !(&((cAlias)->(IndexKey(0)))=cKey)
      (cAlias)->(DbSkip(0))
   ELSEIF nReg>0 .AND. (cAlias)->(RecNo())<>(cAlias)->(LastRec())+1
      DO WHILE nNext<=nReg .AND. !(cAlias)->(EoF()) .AND. &((cAlias)->(IndexKey(0)))=cKey
         (cAlias)->(DbSkip())
         nNext++
      ENDDO
      (cAlias)->(DbSkip(-1))
      nNext--
   ELSEIF nReg<0
      DO WHILE nNext>=nReg .AND. !(cAlias)->(BoF()) .AND. &((cAlias)->(IndexKey(0)))=cKey
         (cAlias)->(DbSkip(-1))
         nNext--
      ENDDO
      IF !(cAlias)->(BoF())
         (cAlias)->(DbSkip())
      ENDIF
      nNext++
   ENDIF
RETURN (nNext)
 
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Algún browse maestro - exclavo para NTX?

Post by triumvirato »

ADBLANCO wrote:Esto hace lo que tu dices:
Espero que te sirva de ejemplo

y auque está hecho para sql, las tablas están en dbf
Angel,

Creo que es lo que estoy buscando... así que me pondré manos a la obra a ver si puedo entender bien el código, soy completamente novato en POO y en FW, así que tengo que ir pasito a pasito.

Entre todo este tiempo he visto una clase GTBrowse (de theful) que hace exáctamente lo que busco, pero es para CDX igualmente (al menos eso dicen los manuales de la clase) y lo que busco es eso mismo pero para NTX y creo que en tu código es posible que esté lo que busco.

MUCHAS MUCHAS GRACIAS.

Saludos!
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Algún browse maestro - exclavo para NTX?

Post by Antonio Linares »

David,

Tienes un ejemplo completo de maestro-esclavo en FWH\samples\gallery\onemany :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Algún browse maestro - exclavo para NTX?

Post by triumvirato »

Alfredo Arteaga wrote:He aquí las funciones que usé mucho tiempo para trabajar con mi viejo Clipper. Estas simulan el comportamiento de SCOPE con NTX y funcionan!

Alfredo,

Muchas gracias por tu aporte y ayuda. Veremos si es lo bastante rápido para los NTX...

Saludos!
triumvirato
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Re: Algún browse maestro - exclavo para NTX?

Post by triumvirato »

Antonio Linares wrote:David,

Tienes un ejemplo completo de maestro-esclavo en FWH\samples\gallery\onemany :-)
Antonio,

Gracias, es perfecto y sencillo, veremos si lo suficientemente rápido para mis bases y los NTX...

Gracias!
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: Algún browse maestro - exclavo para NTX?

Post by Patricio Avalos Aguirre »

Hola

No seria mejor cambiarse a los CDX, te tomara un par de horas en cabiarte
solo un consejo
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Post Reply