Algún browse maestro - exclavo para NTX?

Algún browse maestro - exclavo para NTX?

Postby triumvirato » Wed Nov 11, 2009 4:38 pm

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!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

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

Postby ADBLANCO » Wed Nov 11, 2009 6:57 pm

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
User avatar
ADBLANCO
 
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

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

Postby triumvirato » Wed Nov 11, 2009 7:12 pm

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.
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

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

Postby acuellar » Wed Nov 11, 2009 7:20 pm

Triumvirato

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

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

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

Postby ADBLANCO » Wed Nov 11, 2009 7:28 pm

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


Code: Select all  Expand view


    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  Expand view

******************************************************************************************
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
User avatar
ADBLANCO
 
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

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

Postby triumvirato » Wed Nov 11, 2009 8:00 pm

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!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

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

Postby Alfredo Arteaga » Wed Nov 11, 2009 8:03 pm

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  Expand view
// --- 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)
 
User avatar
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

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

Postby triumvirato » Wed Nov 11, 2009 8:08 pm

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!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

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

Postby Antonio Linares » Wed Nov 11, 2009 9:26 pm

David,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby triumvirato » Thu Nov 12, 2009 8:02 am

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?

Postby triumvirato » Thu Nov 12, 2009 8:09 am

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!
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

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

Postby Patricio Avalos Aguirre » Thu Nov 12, 2009 3:48 pm

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
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 69 guests