Page 1 of 1

función para saber claves de una entrada CDX

Posted: Tue Mar 15, 2016 9:52 am
by pgfdz
Hola.
Quisiera saber si existe alguna función que pregunte al índice CDX por una clave y devuelva un array de registros que apuntan a esa clave.
Un saludo

Re: función para saber claves de una entrada CDX

Posted: Tue Mar 15, 2016 2:52 pm
by Carlos Mora
SELECT (laTabla)
SET ORDER TO (elIndice)
aResult := Array()
dBSeek( cClaveABuscar )
WHILE !Eof() .AND. OrdKeyVal() == cClaveABuscar
aAdd( aResult, Recno() )
SKIP
ENDDO

Re: función para saber claves de una entrada CDX

Posted: Tue Mar 15, 2016 2:57 pm
by cnavarro
O bien, quizás este ejemplo te sirva para lo que buscas

http://forums.fivetechsupport.com/viewt ... 63#p187645

Re: función para saber claves de una entrada CDX

Posted: Wed Mar 16, 2016 9:27 am
by pgfdz
Hola, gracias por las respuestas.

Así es como lo hice:

Code: Select all

*****************************************************************************************************************************************
   function aGetDetails( cCode, cFieldName )
*****************************************************************************************************************************************
local nPos := FieldPos( cFieldName )
local aRet := {}
local nRecno := Recno()
local nOrder := IndexOrd()
DbSetOrder(1)

if DbSeek( cCode, .t. )
   do while fieldGet( nPos ) == cCode
      aadd( aRet, Recno() )
      DbSkip()
   enddo
endif

DbGoto(nRecno)
DbSetOrder( 0 )

return aRet
En todo caso, creo que debe de poderse sacar la información directamente del índice de alguna forma.
El índice debe de guardar un conjunto de valor -> nRecno para poder acceder a la información.
Eso sería genial sin tener que hacer búsquedas.
Un saludo