Duda com Mysql
Publicado: Lun Ene 03, 2011 9:40 pm
Primero que todo Feliz 2011 a todos!!!!
Mi duda es con respecto al uso de los datasets con Mysql, entiendo que
el metodo KeyCount() devuelve el nro de filas en el dataset, al ejecutar
el siguiente codigo:
mTotal := 9096 // SELECT COUNT(*) FROM sinv
mHasta := 20
mDESDE := 0
mTXT := ' SELECT DE SQL Reg Total KeyCount'
FOR i := 1 TO 100
IF ::oDataSet:KeyNo = mHasta
IF mDesde+mHasta < mTotal
mDesde += mHasta
::oDataSet:lOpen := .F.
::oDataSet:Cargo:SetLimit( mDesde, mHasta )
mSQL := ::oDataSet:Cargo:BuildSql()
::oDataSet:cSelect := mSQL
::oDataSet:lOpen := .T.
ENDIF
ELSE
::oDataSet:nSkip()
ENDIF
mTXT+=mSQL+STR(::oDataSet:RecNo())+STR(mDESDE)+STR(mTOTAL)+S TR(::oDataSet:KeyCount())
SLEEP(90)
NEXT
MEMOWRIT('salida.txt',mTXT)
No se supone que ::oDataSet:KeyCount deberia ser simpre 20 (LIMIT nnn,
20) lo mismo pasa con ::oDataSet:RecCount()
salida.txt
----------------------------------------------- ------ -------- --------
SELECT DE SQL Reg Total KeyCount
----------------------------------------------- ------ -------- --------
SELECT * FROM sinv ORDER BY codigo LIMIT 0, 20 1 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 0, 20 2 9,096 20
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 0, 20 20 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 20, 20 21 9,096 20
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 20, 20 39 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 20, 20 40 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 40, 20 41 9,096 40
SELECT * FROM sinv ORDER BY codigo LIMIT 40, 20 42 9,096 40
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 40, 20 60 9,096 40
SELECT * FROM sinv ORDER BY codigo LIMIT 60, 20 61 9,096 60
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 80, 20 81 9,096 80
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 80, 20 100 9,096 80
SELECT * FROM sinv ORDER BY codigo LIMIT 100, 20 101 9,096 100
Mi duda es con respecto al uso de los datasets con Mysql, entiendo que
el metodo KeyCount() devuelve el nro de filas en el dataset, al ejecutar
el siguiente codigo:
mTotal := 9096 // SELECT COUNT(*) FROM sinv
mHasta := 20
mDESDE := 0
mTXT := ' SELECT DE SQL Reg Total KeyCount'
FOR i := 1 TO 100
IF ::oDataSet:KeyNo = mHasta
IF mDesde+mHasta < mTotal
mDesde += mHasta
::oDataSet:lOpen := .F.
::oDataSet:Cargo:SetLimit( mDesde, mHasta )
mSQL := ::oDataSet:Cargo:BuildSql()
::oDataSet:cSelect := mSQL
::oDataSet:lOpen := .T.
ENDIF
ELSE
::oDataSet:nSkip()
ENDIF
mTXT+=mSQL+STR(::oDataSet:RecNo())+STR(mDESDE)+STR(mTOTAL)+S TR(::oDataSet:KeyCount())
SLEEP(90)
NEXT
MEMOWRIT('salida.txt',mTXT)
No se supone que ::oDataSet:KeyCount deberia ser simpre 20 (LIMIT nnn,
20) lo mismo pasa con ::oDataSet:RecCount()
salida.txt
----------------------------------------------- ------ -------- --------
SELECT DE SQL Reg Total KeyCount
----------------------------------------------- ------ -------- --------
SELECT * FROM sinv ORDER BY codigo LIMIT 0, 20 1 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 0, 20 2 9,096 20
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 0, 20 20 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 20, 20 21 9,096 20
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 20, 20 39 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 20, 20 40 9,096 20
SELECT * FROM sinv ORDER BY codigo LIMIT 40, 20 41 9,096 40
SELECT * FROM sinv ORDER BY codigo LIMIT 40, 20 42 9,096 40
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 40, 20 60 9,096 40
SELECT * FROM sinv ORDER BY codigo LIMIT 60, 20 61 9,096 60
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 80, 20 81 9,096 80
. . . . . . . . .
. . . . . . . . .
SELECT * FROM sinv ORDER BY codigo LIMIT 80, 20 100 9,096 80
SELECT * FROM sinv ORDER BY codigo LIMIT 100, 20 101 9,096 100