función para saber claves de una entrada CDX

Post Reply
pgfdz
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

función para saber claves de una entrada CDX

Post 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
Paco García
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

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

Post by Carlos Mora »

SELECT (laTabla)
SET ORDER TO (elIndice)
aResult := Array()
dBSeek( cClaveABuscar )
WHILE !Eof() .AND. OrdKeyVal() == cClaveABuscar
aAdd( aResult, Recno() )
SKIP
ENDDO
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

O bien, quizás este ejemplo te sirva para lo que buscas

http://forums.fivetechsupport.com/viewt ... 63#p187645
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
pgfdz
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

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

Post 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
Paco García
Post Reply