función para saber claves de una entrada CDX

función para saber claves de una entrada CDX

Postby pgfdz » Tue Mar 15, 2016 9:52 am

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
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

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

Postby Carlos Mora » Tue Mar 15, 2016 2:52 pm

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"
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

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

Postby cnavarro » Tue Mar 15, 2016 2:57 pm

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

viewtopic.php?f=3&t=32063#p187645
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby pgfdz » Wed Mar 16, 2016 9:27 am

Hola, gracias por las respuestas.

Así es como lo hice:
Code: Select all  Expand view
*****************************************************************************************************************************************
   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
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 91 guests