Gracias quique por escribir.
Me toco ponerle al XBrowse(), el SetScope() y cuando sale se lo quito. La diferencia que tenia el anterior setfilter() era que no tenia ningun filtro al indice, sino al momento de desplegar solo mostraba los registros dentro dl rango y cuando salia no habia que quitar nada ya que el truco solo mostraba registro.
En el XBrowse() puse un objeto que se carga antes de activar el Xbrowse() y guarda los datos de la Base de datos y cuando sale restaura con todos los scope que tenga.
/***
* DBFINFO()
* Syntax .....: DBFINFO()
* Crea la Clase DbfInfo() que contiene la Informacion actual de la Base de Datos
*/
CLASS DBFINFO
// *** VARIABLES DEL OBJETO ***
EXPORT:
DATA cAlias // Alias de la Base de Datos
DATA nRecNo // Numero del Registro Actual
DATA nOrder // Numero actual del Order del Index
DATA aTags // Array de Tags de los Index
DATA nIndex // Numero de Indexs
DATA aKeys // Array de Keys de los Index
DATA cFocus // Nombre del Order del Index
DATA aScope // Array de Scope de los Index
// *** METODOS DEL OBJETO ***
METHOD New() CONSTRUCTOR // Inicializa los Parametros
METHOD End() // Finaliza el objeto
ENDCLASS
* EOF DBFINFO
/***
* New()
* Syntax .....: New(<cAlias>)
* Arguments ..: <cAlias> Alias de la Base de Datos
* Examples ...: New("MaLiq")
* Inicializa los Valores de la Base de Datos
*/
METHOD New(cAlias) CLASS DBFINFO
Begin Sequence
Default cAlias to Alias()
// Chequea si el Alias esta activa
if Empty(Select(cAlias))
Break(NIL)
endif
// Actualiza los Datos de la Base de Datos
::cAlias := cAlias // Alias de la Base de Datos
::nRecNo := (cAlias)->(RecNo()) // Numero del Registro Actual
::nOrder := (cAlias)->(OrdNumber()) // Numero del Order del Index
::cFocus := (cAlias)->(OrdName()) // Focus Actual del Index
::aTags := (cAlias)->(GetOrdNames()) // Nombre de los Tags de los Index
::nIndex := Len(::aTags) // Numero de Indexs
// Adiciona las Keys de los Index
::aKeys := {}
AEval(::aTags, {|x, i|AAdd(::aKeys, Upper(OrdKey(i)))})
// Adiciona los Scope de los Index
::aScope := {}
AEval(::aTags, {|x, i|(cAlias)->(OrdSetFocus(i)),;
AAdd(::aScope, {(cAlias)->(OrdScope(0)), (cAlias)->(OrdScope(1))})})
EndSequence
Return Self
* EOF New
/***
* End()
* Syntax .....: End()
* Restaura la Base de Datos segun los parametros guardado de la Base de Datos
*/
METHOD End() CLASS DBFINFO
Local cAlias
Begin Sequence
// Inicializa las Variables
cAlias := ::cAlias
// Restaura el Focus
(cAlias)->(OrdSetFocus(::nOrder))
// Restaura el Scope
AEval(::aScope, {|x, i|(cAlias)->(OrdSetFocus(i)),;
(cAlias)->(OrdScope(0, x[1])),;
(cAlias)->(OrdScope(1, x[2]))})
// Posiciona el Registro
(cAlias)->(DbGoTo(::nRecNo))
EndSequence
Return NIL
* EOF End
diferencia de Setfocus() o SetScope()
-
- Posts: 11
- Joined: Sat Mar 08, 2008 3:06 pm
- Location: Colombia - Valledupar
No creo que necesites todo eso con que guardes el registro y el índice creo que es suficiente:
al crear el objeto
y al terminar
al crear el objeto
Code: Select all
nReg := ( cAlias )->( recNo() )
cInd := ( cAlias )->( ordSetFocus() )
Code: Select all
nCont := 0
do while .t.
( cAlias )->( ordSetFocus( ++nCont ) )
if empty ( ( cAlias )->( ordSetFocus() ) )
exit
endIf
( cAlias )->( ordScope( 0, nil ) )
( cAlias )->( ordScope( 1, nil ) )
endDo
( cAlias )->( dbGoto( nReg ) )
( cAlias )->( ordSetFocus( cInd ) )
Saludos
Quique
Quique
-
- Posts: 11
- Joined: Sat Mar 08, 2008 3:06 pm
- Location: Colombia - Valledupar
Gracias quique
Quique
Muchas gracias por tiempo
Cordial Saludo
Alberto Fernandez Maya
Muchas gracias por tiempo
Cordial Saludo
Alberto Fernandez Maya