Page 1 of 1

Otro bug con indice condicional

PostPosted: Tue Apr 25, 2006 1:16 am
by Alvaro Urdaneta
Antonio,

- este caso unicamente sucede cuando el archivo tiene un (1) registro activo, ( puede tener 10 registros pero 9 borrados )
- se utiliza un indice condicional !DELETED()
- un DO WHILE lee todo el archivo y borra el unico registro activo
- al finalizar DO WHILE ordkeycount() devuelve 1 en lugar de 0
- si invoco ordkeycount() inmediatamente despues de DELETE funciona bien, me parece que despues de un DELETE se pierde el eof() y un ordkeycount() lo restablece
- no puedo utilizar GO TOP como me recomendastes en lugar de SKIP porque puede haber condiciones para eliminar el registro



#include "FiveWin.ch"
#include "ord.ch"

//----------------------------------------------------------------------------//

function Main()
local cNumero, nAlgo
local aCampos := {{ 'NUMERO', 'C', 6, 0 }}

set delete on

REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )

dbcreate( 'PRUEBA', aCampos )

select 1
use PRUEBA alias PRUEBA

APPEND BLANK
prueba->NUMERO := "1"

INDEX ON prueba->NUMERO TAG prueba1 TO prueba FOR !DELETED()
GO TOP

DO WHILE !eof()
IF prueba->NUMERO = "1"
DELETE
ENDIF

//si comento la siguiente linea funciona mal ( el mensaje abajo muestra 1 )
//si no lo comento funciona bien ( el mensaje abajo muestra 0 )

// nAlgo := ordkeycount()

SKIP
ENDDO

msginfo( ordkeycount() )

CLOSE ALL

return nil

Saludos

PostPosted: Tue Apr 25, 2006 8:14 am
by Antonio Linares
Alvaro,

Lo hemos reportado en la lista de desarrollo de Harbour a ver que nos dice Przemek, que es el gurĂº de los RDDs :)

PostPosted: Tue Apr 25, 2006 11:28 am
by Alvaro Urdaneta
Antonio,

Gracias por la respuesta, otra cosa, has tenido tiempo de revisar el ejemplo de browse en folder?

Saludos

PostPosted: Wed Apr 26, 2006 10:12 am
by Antonio Linares