Page 1 of 1

esto es correcto??

Posted: Wed Nov 29, 2006 4:31 pm
by Elias Torres
Hola a todos...

Vamos a ver.. Tengo dos tablas:

SELECT 0
USE (CURDIR()+"\temporal.dbf") new
temporal->( OrdSetFocus( "nomart+codart" ) )
INDEX ON codart+nomart TO temporal
Aliastemporal := Alias()

SELECT 0
USE (CURDIR()+"\precios.dbf") new
precios->(OrdSetFocus( "articulo+numero")) &&articulo es el codigo
INDEX ON articulo+numero TO precios
aliasPrecios:=ALIAS()

Entonces realizo una búsqueda sobre la tabla precios según un parámetro. Esta busqueda la realizo asi:

IF precios->(DbSeek(ALLTRIM(cod),.t.))
p:=precios->pvp
else
p:=0
endif
temporal->pvp:=p

Mi pregunta es bien sencilla:

precios->(DbSeek(ALLTRIM(cod),.t.)) ¿¿me posiciona en el registro de la tabla precios para el cual se cumpla la condicion de que sea igual a cod??. Porque supuestamente la tabla está indexada por el codigo (que es lo que representa la variable cod).. Pero me está devolviendo otro valor que no es el que le corresponde. Es como si los indices no estuvieran trabajando bien....


Hay que poner algun set?? He probado a poner el set softseek on (por probar) pero no hay ningún cambio...


Espero alguien me pueda aclarar esta duda..

Saludos y gracias.

Elías Torres.

Posted: Wed Nov 29, 2006 5:46 pm
by Antonio Linares
Elías,

Prueba a hacer los INDEX ON ... antes de llamar a OrdSetFocus()

Posted: Wed Nov 29, 2006 6:10 pm
by Elias Torres
Hola Antonio...

Si pongo los index antes me da error.. ¿Como puedo hacer una búsqueda combinada?¿La puedo hacer con un seek?

Saludos.

Elías Torres.

Posted: Thu Nov 30, 2006 7:27 am
by Antonio Linares
Elías,

Del ejemplo samples\TestBrwS.prg:

USE ( CurDir() + "\Customer" ) VIA "DBFCDX"
INDEX ON Customer->Last TO ( CurDir() + "\LAST" )
Customer->( OrdSetFocus( "LAST" ) )
Customer->( DbGoTop() )
...
Customer->( DbSeek( cSearch, .t. ) )

Posted: Thu Nov 30, 2006 8:17 am
by Biel EA6DD
Veo que haces AllTrim En el seek, puede que ese sea el problema porque cuando indexas lo haces por el campo entero.

Cod=' 1'
En el indice tienes espacio+espacio+1
pero si buscas alltrim Cod, estas buscando 1 en la primera posicion.

No se si me explico.