Página 1 de 1

DataSet ... Error Total Registros

Publicado: Mar Jun 07, 2005 6:48 pm
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.
--

DataSet ... Error Total Registros

Publicado: Mar Jun 07, 2005 7:22 pm
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.
--

DataSet ... Error Total Registros

Publicado: Mar Jun 07, 2005 7:50 pm
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.
--