diferencia de Setfocus() o SetScope()

Post Reply
albertofernandezm
Posts: 11
Joined: Sat Mar 08, 2008 3:06 pm
Location: Colombia - Valledupar

diferencia de Setfocus() o SetScope()

Post by albertofernandezm »

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
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Post by quique »

No creo que necesites todo eso con que guardes el registro y el índice creo que es suficiente:

al crear el objeto

Code: Select all

nReg := ( cAlias )->( recNo() )
cInd := ( cAlias )->( ordSetFocus() )
y al terminar

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
albertofernandezm
Posts: 11
Joined: Sat Mar 08, 2008 3:06 pm
Location: Colombia - Valledupar

Gracias quique

Post by albertofernandezm »

Quique

Muchas gracias por tiempo

Cordial Saludo

Alberto Fernandez Maya
Post Reply