FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Actualizar Index Abierto en Listbox
Posts: 325
Joined: Sun Feb 03, 2008 11:04 PM
Actualizar Index Abierto en Listbox
Posted: Tue Mar 31, 2009 09:03 AM
Estimados Amigos

Tengo un problema y no se como puedo solucionarlos....

Tengo un Listbox de una bases de dato filtrada y estoy realizando un refresh() actualizando la visualizacion, el tema que cuando desde otra terminal me agrega un registro desde el Listbox que tengo en ejecuacion NO se actualiza el Index por lo que cuando hago la actualiuzacion muestra cualquier cosa, en principio "creo" que es logico ya que la base de dato se actualiza pero el index NO.
Se puede actualizar el Index miestras esté abierto dentro de un Listbox??

esero haber sido claro :-) :-)

paso como tengo armado mi aplicacion...

Code (fw): Select all Collapse
...
..
.
  DBSELECTAREA( PRESUPU )
  @ 0.875,  1 LISTBOX oLbxPRESU ;
                     FIELDS Transform((PRESUPU)->SOL_NRO,'9999999999') ,;
                            Transform((PRESUPU)->PRE_NRO,'9999999999') ,;
                            (PRESUPU)->NOMB ,;
                            StatusPresupuesto((PRESUPU)->CANCSPR) ,;
                            (PERAUTO)->NOMBRE ,;
                            str((PRESUPU)->CANCSPR,2) ;
                     HEADERS 'Sol.Cotizacion' ,;
                             'Presupuesto',;
                             'Cliente',;
                             'Status' ,;
                             'Usuario Actual:' ,;
                             ' ' ;
                     SELECT 'USUACTU' FOR mRESP TO mRESP ;
                     on change ( xRecno := (PRESUPU)->(RECNO()) ,;
                                 If((PRESUPU)->PRE_NRO<>0,;
                                     (oBTN2:DISABLE(),oBTN5:ENABLE() ) ,;
                                     (oBTN2:ENABLE() ,oBTN5:DISABLE())) ,;
                                 oLbxPRESU:nClrPane:={||If((PRESUPU)->URGENCI==1,;
                                                                            CLR_HCYAN,;
                                                                            CLR_HGRAY ) } ) ;
                     FIELDSIZES 70,70,180,250,180,40 ;
                       SIZE 290,145 ;
                         of oDlgCar

   oLbxPRESU:nLineStyle = 1

   oLbxPRESU:SetFilter( 'USUACTU' ,mRESP ,mRESP )
   oLbxPRESU:GoTop()
   oLbxPRESU:Refresh()

   oBTN1:ENABLE() // Nueva SP
   If (PRESUPU)->PRE_NRO <> 0 .and. !(PRESUPU)->(eof())
     oBTN2:ENABLE()  // Mofid.Anular SP
   Else
     oBTN2:DISABLE()  // Mofid.Anular SP
   EndIf

   If AccePRESU .and. (PRESUPU)->PRE_NRO <> 0
     oBTN3:ENABLE()  // PRESUPUESTO
   Else
     oBTN3:DISABLE()  // PRESUPUESTO
   EndIf

  
ACTIVATE DIALOG oDlgCar CENTERED  ;
                ON INIT (ActuaLista(oLbxPRESU,PRESUPU,mRESP,oDlgCar),;
                         oLbxPRESU:SetFocus())

dbcloseall()

return .t.


FUNCTION ActuaLista(oLbx , base , mRESP , oDlg)
          
DEFINE TIMER oTmr INTERVAL 10000 ;
             ACTION ((base)->(dbgoto(xRecno)) ,; //    oLbx:Upstable(),;
                     oDlg:Update() ) ;
                     of oDlg
ACTIVATE TIMER oTmr  

RETURN .t.

EXIT PROC Salir()

  // esto se ejecuta al salir, normal o cuelgue
  // y verificas si es un Obj es que no se elimino, asi que le das ::END()
if valtype(oTmr) == "O" 
    oTmr:End() ;  oTmr := NIL
endif

return NIL
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Actualizar Index Abierto en Listbox
Posted: Tue Mar 31, 2009 04:04 PM

Hola,
Te sugiero lo siguiente:
1ro, ten un EVAL para realizar el filtrado, te aconsejo que uses OrdScope
2do, arma un timer que cada x segundos active el EVAL y luego un refresh en el listbox, listo...

eFiltro := {||DBSELECTAREA( PRESUPU ), OrdScope(mRESP,0),OrdScope(mRESP,0), oLbx:Refresh()}
EVAL(eFiltro)
DEFINE TIMER oTrm INTERVAL 10000 ACTION EVAL(eFiltro)
@ 0.875, 1 LISTBOX oLbxPRESU ;
FIELDS Transform((PRESUPU)->SOL_NRO,'9999999999') ,;
Transform((PRESUPU)->PRE_NRO,'9999999999') ,;
(PRESUPU)->NOMB ,;
StatusPresupuesto((PRESUPU)->CANCSPR) ,;
(PERAUTO)->NOMBRE ,;
str((PRESUPU)->CANCSPR,2) ;
HEADERS 'Sol.Cotizacion' ,;
'Presupuesto',;
'Cliente',;
'Status' ,;
'Usuario Actual:' ,;
' ' ;
on change ( xRecno := (PRESUPU)->(RECNO()) ,;
If((PRESUPU)->PRE_NRO<>0,;
(oBTN2:DISABLE(),oBTN5:ENABLE() ) ,;
(oBTN2:ENABLE() ,oBTN5:DISABLE())) ,;
oLbxPRESU:nClrPane:={||If((PRESUPU)->URGENCI==1,;
CLR_HCYAN,;
CLR_HGRAY ) } ) ;
FIELDSIZES 70,70,180,250,180,40 ;
SIZE 290,145 ;
of oDlgCar

oLbxPRESU:nLineStyle = 1

oLbxPRESU:GoTop()

oLbxPRESU:Refresh()

oBTN1:ENABLE() // Nueva SP
If (PRESUPU)->PRE_NRO <> 0 .and. !(PRESUPU)->(eof())
oBTN2:ENABLE() // Mofid.Anular SP
Else
oBTN2:DISABLE() // Mofid.Anular SP
EndIf

If AccePRESU .and. (PRESUPU)->PRE_NRO <> 0
oBTN3:ENABLE() // PRESUPUESTO
Else
oBTN3:DISABLE() // PRESUPUESTO
EndIf

ACTIVATE DIALOG oDlgCar CENTERED ;
ON INIT (oTmr:Activate())

dbcloseall()

return .t.

// esto se ejecuta al salir, normal o cuelgue
// y verificas si es un Obj es que no se elimino, asi que le das ::END()
if valtype(oTmr) == "O"
oTmr:End() ; oTmr := NIL
endif

return NIL

Posts: 325
Joined: Sun Feb 03, 2008 11:04 PM
Re: Actualizar Index Abierto en Listbox
Posted: Wed Apr 01, 2009 11:33 PM

Amigo Willi

muchas gracias por tu respuesta, hago la prueba y te aviso...

gracias

david
argentina

Continue the discussion