In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

DataSet ... Error Total Registros

Foro público de Xailer en español
Responder
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

DataSet ... Error Total Registros

Mensaje por Xevi »

Hola,
//Creo un DbfDataSet... usando NTX
WITH OBJECT ::oNtxDataSource1 := TNtxDataSource():New( Self )
:cConnect := "."
:Create()
END
WITH OBJECT ::oDbfDataSet1 := TDbfDataSet():New( Self )
:oDataSource := ::oNtxDataSource1
:cProcess := "GENERAL"
o:cName := "CMOV.dbf"
o:AddIdxFile( "C11" )
o:AddIdxFile( "C14" )
o:AddIdxFile( "C15" )
o:AddIdxFile( "C16" )
o:AddIdxFile( "C17" )
o:AddIdxFile( "C18" )
:lOpen := .T.
:Create()
END
Creo un StatusBar para mostrar en que registro estoy del total de registros...
Y en OnChange del Browse...
METHOD DBBrowse1Change( oSender, lBookMarkChanged ) CLASS TFrmBrowseCMOV
::oStatusBar1:aItems[2]:cText := "Registro " +;
AllTrim( Str( ::oDBBrowse1:nKeyNo ) ) +;
" de " +;
AllTrim( Str( ::oDbfDataSet1:RecCount() ) ) //Resultado 19117
* AllTrim( Str( ::oDBBrowse1:KeyCount() ) ) //Resultado 19117
RETURN Nil
Un botón para aplicar un Filtro al DataSet...
METHOD Button1Click( oSender ) CLASS TFrmBrowseCMOV
::oDbfDataSet1:Filter( " COMENTARI = 'A' ", .T. )
RETURN Nil
Bien... el filtrado lo hace PERFECTO... PERO... el Evento OnChange del Browse me sigue dando como resultado de total de Registros igual que sin el filtrado 19117... ¿?¿?
Y si pulso la tecla <Fin>... se va al último registro correctamente, pero me está informando que estoy en el registro 19119 de 19117.¿?¿?
Existe un Bug al tratar con Filtros o estoy haciendo algo mal???
Gracias,
Un Saludo,
Xevi.
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

DataSet ... Error Total Registros

Mensaje por ignacio »

Xevi,
Como te puedes imaginar el RecCount esta basado en la propia función del RDD. Con eso creo que está dicho todo.
KeyCount esta basado en OrdKeyCount() del RDD pero para NTX dicha funcionalidad todaví­a no esta implementada, pero lo va estar en un par de dí­as cuando salga la definitiva Beta 1.5, pero en cualquier caso NO contemplará el uso de filtros. Lo mismo ocurre ocn KeyNo.
Si necesitas que KeyCount y nKeyNo te den información exacta tendrás que poner la propiedad lKeyExact a .T., pero OJO, consume un montón de recursos por lo que no te recomiendo que lo utilices en en tablas que una vez filtradas tengan un montón de registros visibles. Usala con cuidado.
En cualquier caso las incongruencias que indicas seguro que sabrás que son limitaciones de los propios RDD y en definitiva del sistema de archivos Dbase, y por supuesto ocurrí­an igualmente en Clipper. Con bases de datos SQL este problema no existe, no obstante, una máxima de SQL es nunca hacer cursores que devuelvan esa cantidad ingente de registros.
Saludos
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=42a5cfd4@ozsrvnegro.ozlan.local...]42a5cfd4@ozsrvnegro.ozlan.local...[/email]
Hola,
//Creo un DbfDataSet... usando NTX
WITH OBJECT ::oNtxDataSource1 := TNtxDataSource():New( Self )
:cConnect := "."
:Create()
END
WITH OBJECT ::oDbfDataSet1 := TDbfDataSet():New( Self )
:oDataSource := ::oNtxDataSource1
:cProcess := "GENERAL"
o:cName := "CMOV.dbf"
o:AddIdxFile( "C11" )
o:AddIdxFile( "C14" )
o:AddIdxFile( "C15" )
o:AddIdxFile( "C16" )
o:AddIdxFile( "C17" )
o:AddIdxFile( "C18" )
:lOpen := .T.
:Create()
END
Creo un StatusBar para mostrar en que registro estoy del total de registros...
Y en OnChange del Browse...
METHOD DBBrowse1Change( oSender, lBookMarkChanged ) CLASS TFrmBrowseCMOV
::oStatusBar1:aItems[2]:cText := "Registro " +;
AllTrim( Str( ::oDBBrowse1:nKeyNo ) ) +;
" de " +;
AllTrim( Str( ::oDbfDataSet1:RecCount() ) ) //Resultado 19117
* AllTrim( Str( ::oDBBrowse1:KeyCount() ) ) //Resultado 19117
RETURN Nil
Un botón para aplicar un Filtro al DataSet...
METHOD Button1Click( oSender ) CLASS TFrmBrowseCMOV
::oDbfDataSet1:Filter( " COMENTARI = 'A' ", .T. )
RETURN Nil
Bien... el filtrado lo hace PERFECTO... PERO... el Evento OnChange del Browse me sigue dando como resultado de total de Registros igual que sin el filtrado 19117... ¿?¿?
Y si pulso la tecla <Fin>... se va al último registro correctamente, pero me está informando que estoy en el registro 19119 de 19117.¿?¿?
Existe un Bug al tratar con Filtros o estoy haciendo algo mal???
Gracias,
Un Saludo,
Xevi.
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

DataSet ... Error Total Registros

Mensaje por Xevi »

Ignacio,
He añadido...
::oDbfDataSet1:lKeyExact := .T.
Al pulsar en el botón de filtrado... pero sigue erre que erre dando 19117 registros totales...
Cuando trabajo con filtros, suelen ser muy pocos registros... 6, 10, 50, 80...
Un saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:42a5d7cf$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Como te puedes imaginar el RecCount esta basado en la propia función del RDD. Con eso creo que está dicho todo.
KeyCount esta basado en OrdKeyCount() del RDD pero para NTX dicha funcionalidad todaví­a no esta implementada, pero lo va estar en un par de dí­as cuando salga la definitiva Beta 1.5, pero en cualquier caso NO contemplará el uso de filtros. Lo mismo ocurre ocn KeyNo.
Si necesitas que KeyCount y nKeyNo te den información exacta tendrás que poner la propiedad lKeyExact a .T., pero OJO, consume un montón de recursos por lo que no te recomiendo que lo utilices en en tablas que una vez filtradas tengan un montón de registros visibles. Usala con cuidado.
En cualquier caso las incongruencias que indicas seguro que sabrás que son limitaciones de los propios RDD y en definitiva del sistema de archivos Dbase, y por supuesto ocurrí­an igualmente en Clipper. Con bases de datos SQL este problema no existe, no obstante, una máxima de SQL es nunca hacer cursores que devuelvan esa cantidad ingente de registros.
Saludos
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=42a5cfd4@ozsrvnegro.ozlan.local...]42a5cfd4@ozsrvnegro.ozlan.local...[/email]
Hola,
//Creo un DbfDataSet... usando NTX
WITH OBJECT ::oNtxDataSource1 := TNtxDataSource():New( Self )
:cConnect := "."
:Create()
END
WITH OBJECT ::oDbfDataSet1 := TDbfDataSet():New( Self )
:oDataSource := ::oNtxDataSource1
:cProcess := "GENERAL"
o:cName := "CMOV.dbf"
o:AddIdxFile( "C11" )
o:AddIdxFile( "C14" )
o:AddIdxFile( "C15" )
o:AddIdxFile( "C16" )
o:AddIdxFile( "C17" )
o:AddIdxFile( "C18" )
:lOpen := .T.
:Create()
END
Creo un StatusBar para mostrar en que registro estoy del total de registros...
Y en OnChange del Browse...
METHOD DBBrowse1Change( oSender, lBookMarkChanged ) CLASS TFrmBrowseCMOV
::oStatusBar1:aItems[2]:cText := "Registro " +;
AllTrim( Str( ::oDBBrowse1:nKeyNo ) ) +;
" de " +;
AllTrim( Str( ::oDbfDataSet1:RecCount() ) ) //Resultado 19117
* AllTrim( Str( ::oDBBrowse1:KeyCount() ) ) //Resultado 19117
RETURN Nil
Un botón para aplicar un Filtro al DataSet...
METHOD Button1Click( oSender ) CLASS TFrmBrowseCMOV
::oDbfDataSet1:Filter( " COMENTARI = 'A' ", .T. )
RETURN Nil
Bien... el filtrado lo hace PERFECTO... PERO... el Evento OnChange del Browse me sigue dando como resultado de total de Registros igual que sin el filtrado 19117... ¿?¿?
Y si pulso la tecla <Fin>... se va al último registro correctamente, pero me está informando que estoy en el registro 19119 de 19117.¿?¿?
Existe un Bug al tratar con Filtros o estoy haciendo algo mal???
Gracias,
Un Saludo,
Xevi.
--
Responder