Página 1 de 1

DbfBrowse con Filtro...

Publicado: Jue Ago 25, 2005 12:14 am
por Xevi
Hola,
volvemos ya a la normalidad, poquito a poco, después del perí­odo vacacional...
Bien, pues estoy con el TDbfBrowse... usándolo como el sample "Nostálgicos"...
Y me doy cuenta que el Scroll de la barra vertical no se corresponde con las posiciones de los registros que muestra el Browse, cuando éste muestra los registros sobre una DBF "filtrados".
En concreto... sobre una DBF de 30 registros... y hago que no muestre el primero... visualiza correctamente 29... pero el selector de la barra Scroll se posiciona como si estuviera en el registro 2.
Luego... para el uso del DbfBrowse,
¿le podeis añadir una propiedad que de el registro actual que se encuentra el Browse???
¿Serí­a posible... la propiedad nRow???
Y otra que devolviera el total de los registros que se muestran...
¿Serí­a posible... la propiedad nCount???
Ya que en una Dbf con filtros, no funcionan correctamente...
::oDbfBrowse1:nKeyNo
::oDbfBrowse1:KeyCount()
Un Saludo,
Xevi.
Pdta.: de momento me apaño haciendo esto en DbfBrowse1Change...
local nCount, nPos, nRecno, cGuarda
nRecno := (::cAlias)->( Recno() )
cGuarda := (::cAlias)->NUMERO
nCount := 0
(::cAlias)->( DbEval( {|| nCount++, If( (::cAlias)->NUMERO == cGuarda, nPos := nCount, ) } ) )
::oStatusBar1:aItems[2]:cText := "Registro: " +;
AllTrim( Str( nPos ) ) +;
" de " +;
AllTrim( Str( nCount ) )
(::cAlias)->( DbGoTo( nRecno ) )
aunque sigue sin funcionar correctamente la barra Scroll vertical.
--

DbfBrowse con Filtro...

Publicado: Jue Ago 25, 2005 10:55 am
por ignacio
Xevi,
Como te puedes imaginar la barra de scroll se apoya en la funciones Ord...() de Clipper que cuando hay registros borrados o un filtro ni se entera. Si está en tu mano conseguir dicha información de forma más exacta no tienes más que modificar los eventos OnKeyNo y OnKeyCount por los tuyos.
Por defecto está es la configuración de ambos métodos:
::OnKeyNo := {|o, n| iif( n == nil,;
( ::cAlias )->( OrdKeyNo() ),;
( ::cAlias )->( OrdKeyGoto( n ) );
) }
::OnKeyCount := {|o| ( ::cAlias )->( OrdKeyCount() ) }
Fijate que OnKeyNo dependiendo de si recibe parametro hace operaciones distintas.
Para obtener el registro actual en base al recno: nRecno := oBrw:OnBookMark()
Para obtener el registro actual en base al index: nRecno := oBrw:OnKeyNo()
Para obtener el total de registros: nTotal := oBrw:OnKeyCount()
Por otra parte, si utilizas DataControl, entonces tienes la propiedad lKeyExact que siempre devuelve valores reales en OnKeyNo y OnKeyCount, pero mucho OJO por que afecta muchí­simo a la velocidad y su uso sólo es recomendable en browses de pocos registros (que es precisamente donde se ve el efecto negativo).
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=430cf15e@ozsrvnegro.ozlan.local...]430cf15e@ozsrvnegro.ozlan.local...[/email]
Hola,
volvemos ya a la normalidad, poquito a poco, después del perí­odo vacacional...
Bien, pues estoy con el TDbfBrowse... usándolo como el sample "Nostálgicos"...
Y me doy cuenta que el Scroll de la barra vertical no se corresponde con las posiciones de los registros que muestra el Browse, cuando éste muestra los registros sobre una DBF "filtrados".
En concreto... sobre una DBF de 30 registros... y hago que no muestre el primero... visualiza correctamente 29... pero el selector de la barra Scroll se posiciona como si estuviera en el registro 2.
Luego... para el uso del DbfBrowse,
¿le podeis añadir una propiedad que de el registro actual que se encuentra el Browse???
¿Serí­a posible... la propiedad nRow???
Y otra que devolviera el total de los registros que se muestran...
¿Serí­a posible... la propiedad nCount???
Ya que en una Dbf con filtros, no funcionan correctamente...
::oDbfBrowse1:nKeyNo
::oDbfBrowse1:KeyCount()
Un Saludo,
Xevi.
Pdta.: de momento me apaño haciendo esto en DbfBrowse1Change...
local nCount, nPos, nRecno, cGuarda
nRecno := (::cAlias)->( Recno() )
cGuarda := (::cAlias)->NUMERO
nCount := 0
(::cAlias)->( DbEval( {|| nCount++, If( (::cAlias)->NUMERO == cGuarda, nPos := nCount, ) } ) )
::oStatusBar1:aItems[2]:cText := "Registro: " +;
AllTrim( Str( nPos ) ) +;
" de " +;
AllTrim( Str( nCount ) )
(::cAlias)->( DbGoTo( nRecno ) )
aunque sigue sin funcionar correctamente la barra Scroll vertical.
--

DbfBrowse con Filtro...

Publicado: Lun Sep 05, 2005 12:33 pm
por Xevi
Ignacio,
He modificado el evento OnKeyCount()...
METHOD FormInitialize( oSender ) CLASS TFrmControlIncidents
::oDbfBrowse1:OnKeyCount := {|o| xCount( ::cAlias ) }
::cText := "Total Registros: " + Str( ::oDbfBrowse1:OnKeyCount() )
::oDbfBrowse1:Refresh()
::oDbfBrowse1:GoTop()
RETURN Nil
Static Function xCount( cAlias, o )
local n := 0, nRecno := (cAlias)->( Recno() )
(cAlias)->( DbEval( {|| n++ } ) )
(cAlias)->( DbGoto( nRecno ) )
Return n
Ahora me muestra el TOTAL de los registros correctamente e incluso la barra Scroll Vertical se corresponde con la realidad del movimiento por el Browse. Eso me sirve perfectamente...
Ahora bien... no consigo entender como tengo que hacerlo para saber el registro actual, sobre esa base de datos filtrada...
¿Hay alguna manera de poder saber en que registro estoy??? algo como el nArrayAt... que en un ArrayBrowse devuelve el num de fila que se encuentra el Browse.
Si no existe esa propiedad en un DbfBrowse, ¿se podrí­a implementar??? o, incluso, me atrevo a decir...
¿se puede saber la posición/nValue de la BarraScrollVertical???
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje news:[email=430d8756@ozsrvnegro.ozlan.local...]430d8756@ozsrvnegro.ozlan.local...[/email]
Xevi,
Como te puedes imaginar la barra de scroll se apoya en la funciones Ord...() de Clipper que cuando hay registros borrados o un filtro ni se entera. Si está en tu mano conseguir dicha información de forma más exacta no tienes más que modificar los eventos OnKeyNo y OnKeyCount por los tuyos.
Por defecto está es la configuración de ambos métodos:
::OnKeyNo := {|o, n| iif( n == nil,;
( ::cAlias )->( OrdKeyNo() ),;
( ::cAlias )->( OrdKeyGoto( n ) );
) }
::OnKeyCount := {|o| ( ::cAlias )->( OrdKeyCount() ) }
Fijate que OnKeyNo dependiendo de si recibe parametro hace operaciones distintas.
Para obtener el registro actual en base al recno: nRecno := oBrw:OnBookMark()
Para obtener el registro actual en base al index: nRecno := oBrw:OnKeyNo()
Para obtener el total de registros: nTotal := oBrw:OnKeyCount()
Por otra parte, si utilizas DataControl, entonces tienes la propiedad lKeyExact que siempre devuelve valores reales en OnKeyNo y OnKeyCount, pero mucho OJO por que afecta muchí­simo a la velocidad y su uso sólo es recomendable en browses de pocos registros (que es precisamente donde se ve el efecto negativo).
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=430cf15e@ozsrvnegro.ozlan.local...]430cf15e@ozsrvnegro.ozlan.local...[/email]
Hola,
volvemos ya a la normalidad, poquito a poco, después del perí­odo vacacional...
Bien, pues estoy con el TDbfBrowse... usándolo como el sample "Nostálgicos"...
Y me doy cuenta que el Scroll de la barra vertical no se corresponde con las posiciones de los registros que muestra el Browse, cuando éste muestra los registros sobre una DBF "filtrados".
En concreto... sobre una DBF de 30 registros... y hago que no muestre el primero... visualiza correctamente 29... pero el selector de la barra Scroll se posiciona como si estuviera en el registro 2.
Luego... para el uso del DbfBrowse,
¿le podeis añadir una propiedad que de el registro actual que se encuentra el Browse???
¿Serí­a posible... la propiedad nRow???
Y otra que devolviera el total de los registros que se muestran...
¿Serí­a posible... la propiedad nCount???
Ya que en una Dbf con filtros, no funcionan correctamente...
::oDbfBrowse1:nKeyNo
::oDbfBrowse1:KeyCount()
Un Saludo,
Xevi.
Pdta.: de momento me apaño haciendo esto en DbfBrowse1Change...
local nCount, nPos, nRecno, cGuarda
nRecno := (::cAlias)->( Recno() )
cGuarda := (::cAlias)->NUMERO
nCount := 0
(::cAlias)->( DbEval( {|| nCount++, If( (::cAlias)->NUMERO == cGuarda, nPos := nCount, ) } ) )
::oStatusBar1:aItems[2]:cText := "Registro: " +;
AllTrim( Str( nPos ) ) +;
" de " +;
AllTrim( Str( nCount ) )
(::cAlias)->( DbGoTo( nRecno ) )
aunque sigue sin funcionar correctamente la barra Scroll vertical.
--

DbfBrowse con Filtro...

Publicado: Lun Sep 05, 2005 2:46 pm
por ignacio
Xevi,
Como te comente los DataSets tienen implementada dichoa funcionalidad con lKeyExact a .T.
El código que utilizamos en los DataSets que facilmente puedes tu también acoplar al TDbfBrowse es el siguiente:
METHOD KeyNo( lExact ) CLASS XDbfDataSet
local nKeyNo, nRecno
DEFAULT lExact TO ::lKeyExact
If lExact
nKeyNo := 1
nRecno := ::Recno()
( ::cAlias )->( DbGoTop() )
( ::cAlias )->( DbEval( {|| nKeyNo ++ },, {|| nRecno != Recno() } ) )
( ::cAlias )->( DbGoTo( nRecno ) )
Return nKeyNo
Endif
RETURN ( ::cAlias )->( OrdKeyNo() )
Te recuerdo que el sistema es lento, y sólo se debe de usar con pequeñas tablas.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=431c1f0f@ozsrvnegro.ozlan.local...]431c1f0f@ozsrvnegro.ozlan.local...[/email]
Ignacio,
He modificado el evento OnKeyCount()...
METHOD FormInitialize( oSender ) CLASS TFrmControlIncidents
::oDbfBrowse1:OnKeyCount := {|o| xCount( ::cAlias ) }
::cText := "Total Registros: " + Str( ::oDbfBrowse1:OnKeyCount() )
::oDbfBrowse1:Refresh()
::oDbfBrowse1:GoTop()
RETURN Nil
Static Function xCount( cAlias, o )
local n := 0, nRecno := (cAlias)->( Recno() )
(cAlias)->( DbEval( {|| n++ } ) )
(cAlias)->( DbGoto( nRecno ) )
Return n
Ahora me muestra el TOTAL de los registros correctamente e incluso la barra Scroll Vertical se corresponde con la realidad del movimiento por el Browse. Eso me sirve perfectamente...
Ahora bien... no consigo entender como tengo que hacerlo para saber el registro actual, sobre esa base de datos filtrada...
¿Hay alguna manera de poder saber en que registro estoy??? algo como el nArrayAt... que en un ArrayBrowse devuelve el num de fila que se encuentra el Browse.
Si no existe esa propiedad en un DbfBrowse, ¿se podrí­a implementar??? o, incluso, me atrevo a decir...
¿se puede saber la posición/nValue de la BarraScrollVertical???
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje news:[email=430d8756@ozsrvnegro.ozlan.local...]430d8756@ozsrvnegro.ozlan.local...[/email]
Xevi,
Como te puedes imaginar la barra de scroll se apoya en la funciones Ord...() de Clipper que cuando hay registros borrados o un filtro ni se entera. Si está en tu mano conseguir dicha información de forma más exacta no tienes más que modificar los eventos OnKeyNo y OnKeyCount por los tuyos.
Por defecto está es la configuración de ambos métodos:
::OnKeyNo := {|o, n| iif( n == nil,;
( ::cAlias )->( OrdKeyNo() ),;
( ::cAlias )->( OrdKeyGoto( n ) );
) }
::OnKeyCount := {|o| ( ::cAlias )->( OrdKeyCount() ) }
Fijate que OnKeyNo dependiendo de si recibe parametro hace operaciones distintas.
Para obtener el registro actual en base al recno: nRecno := oBrw:OnBookMark()
Para obtener el registro actual en base al index: nRecno := oBrw:OnKeyNo()
Para obtener el total de registros: nTotal := oBrw:OnKeyCount()
Por otra parte, si utilizas DataControl, entonces tienes la propiedad lKeyExact que siempre devuelve valores reales en OnKeyNo y OnKeyCount, pero mucho OJO por que afecta muchí­simo a la velocidad y su uso sólo es recomendable en browses de pocos registros (que es precisamente donde se ve el efecto negativo).
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=430cf15e@ozsrvnegro.ozlan.local...]430cf15e@ozsrvnegro.ozlan.local...[/email]
Hola,
volvemos ya a la normalidad, poquito a poco, después del perí­odo vacacional...
Bien, pues estoy con el TDbfBrowse... usándolo como el sample "Nostálgicos"...
Y me doy cuenta que el Scroll de la barra vertical no se corresponde con las posiciones de los registros que muestra el Browse, cuando éste muestra los registros sobre una DBF "filtrados".
En concreto... sobre una DBF de 30 registros... y hago que no muestre el primero... visualiza correctamente 29... pero el selector de la barra Scroll se posiciona como si estuviera en el registro 2.
Luego... para el uso del DbfBrowse,
¿le podeis añadir una propiedad que de el registro actual que se encuentra el Browse???
¿Serí­a posible... la propiedad nRow???
Y otra que devolviera el total de los registros que se muestran...
¿Serí­a posible... la propiedad nCount???
Ya que en una Dbf con filtros, no funcionan correctamente...
::oDbfBrowse1:nKeyNo
::oDbfBrowse1:KeyCount()
Un Saludo,
Xevi.
Pdta.: de momento me apaño haciendo esto en DbfBrowse1Change...
local nCount, nPos, nRecno, cGuarda
nRecno := (::cAlias)->( Recno() )
cGuarda := (::cAlias)->NUMERO
nCount := 0
(::cAlias)->( DbEval( {|| nCount++, If( (::cAlias)->NUMERO == cGuarda, nPos := nCount, ) } ) )
::oStatusBar1:aItems[2]:cText := "Registro: " +;
AllTrim( Str( nPos ) ) +;
" de " +;
AllTrim( Str( nCount ) )
(::cAlias)->( DbGoTo( nRecno ) )
aunque sigue sin funcionar correctamente la barra Scroll vertical.
--