Page 1 of 1

una de índices

Posted: Thu Sep 06, 2007 3:42 pm
by MOISES
Hola:

Tengo una base de datos previamente indexada y abierta:

select 1
use usuarios index usuarios shared

me gustaria cambiar el índice para hacer un listado y luego restaurar al índice anterior. Me falla la restauración al índice anterior, que no me sale.

He probado con set index &tempindex additive y luego set order to 1 pero me sigue cogiendo el indice nuevo.


Por favor, os agradecería que me digáis cómo se hace. Un millón de gracias.

Un saludo

Re: una de índices

Posted: Thu Sep 06, 2007 4:25 pm
by Manuel Aranda
Hola Moisés:

Local nOrdenFactura:=FACTURA->(IndexOrd()) //Guarda el índice actual
FACTURA->(DbSetOrder(2)) // Cambia al índice número 2
.........
.........
FACTURA->(DbSetOrder(nOrdenFactura))//Restaura el índice inicial

Saludos,
Manuel
MOISES wrote:Hola:

Tengo una base de datos previamente indexada y abierta:

select 1
use usuarios index usuarios shared

me gustaria cambiar el índice para hacer un listado y luego restaurar al índice anterior. Me falla la restauración al índice anterior, que no me sale.

He probado con set index &tempindex additive y luego set order to 1 pero me sigue cogiendo el indice nuevo.


Por favor, os agradecería que me digáis cómo se hace. Un millón de gracias.

Un saludo

Posted: Thu Sep 06, 2007 4:56 pm
by Patricio Avalos Aguirre
Puedes usar tambien OrdSetfocus

cFocu := Alias->( OrdSetFocus() ) // guarda indice

alias->( OrdSetFocus( "tag2" ) )

blblblblb

alias->( OrdSetFocus( cFocu ) ) //restauramos el indice....

espero que te sirva

Posted: Thu Sep 06, 2007 4:59 pm
by MOISES
Hola:

Muchas gracias por responderme. Perdón, se trata de un índice temporal que creo antes de usar el listado.

hago un set index to &tempfile

lo que me has dicho también lo he probado y nada. Vuelve siempre al índice temporal que he creado.

Un saludo

Quizas...

Posted: Thu Sep 06, 2007 5:37 pm
by derpipu
No me ha pasado, pero creo haber visto en la ayuda de clipper, algo acerca de un Additive o algo asi..

porque no lo checas...

http://www.ousob.com/ng/53guide/

Saludos

Posted: Thu Sep 06, 2007 6:00 pm
by MOISES
Sí, si ya lo he probado

set index &tempind additive

pero sigue sin ir.

Posted: Fri Sep 07, 2007 8:40 am
by Loren
Debes hacer lo siguiente:
1.- primero abre la DBF en modo exclusivo
2.- creas el NTX temporal correspondiente
3.- abres la DBF en modo compartido con los 2 NTX
4.- utilizas la orden: set order to 1 o 2 en función de tus necesidades

es decir...

use usuarios exclusive
index on campo to otroNTX
use
use usuarios index usuarios,otrontx SHARED
set order to 2
.....
....
set order to 1
...


y listo el pollo!!

Posted: Fri Sep 07, 2007 10:24 am
by MOISES
El problema es que NO puedo abrir la base en exclusive. Si no, claro que sería más fácil, pero no puedo cerrar la base ni abrirla en exclusive.

Posted: Fri Sep 07, 2007 3:27 pm
by jacgsoft
Por lo que entiendo tu tabla tiene 2 Indices

Si es asi solo abrelo con los 2 indices y luego usa Set Order To


Use tabla Shared
Set Index To Indice1, Indice2


Set Order To 2 // usas el indice 2.

Set Order To 1 // regresas al indice 1.


y listo

Posted: Fri Sep 07, 2007 3:38 pm
by Vital
Por lo que entiendo es que su tabla tiene un solo indice

Crear un indice al vuelo, utilizarlo y despues regresar al indice inicial

Es correcto ?

Ahora porque no le pones 2 indice a tu tabla para no estar creando indices al vuelo ?

Posted: Fri Sep 07, 2007 4:18 pm
by wilsongamboa
Moises yo lo haria asi

Use tabla Shared
index on Campodetutabla to (cNtx) //indice temporal

tabla->( dbclosearea() )

Use tabla index Indice1, Indice2 Shared
Set Index To 1 // o set index to 2

OJO durante la base este abierta con el indice temporal NO PUEDES AUMENTAR no modificar registros porque no se actualizarian los indices, y si eso es lo que necesitas deberias hacer asi

Use tabla Shared
index on Campodetutabla to cNtx //indice temporal

tabla->( dbclosearea() )

Use tabla index Indice1, Indice2, cNtx Shared
Set Index To 1 // o set index to 2 (// o set index to 3

aqui si ya podrias aumentar o editar registros, al final cierras la tabla y eliminas el indice temporal
dbclosearea()
ferase( cNtx )


espero te sirva
Saludos

Posted: Fri Sep 07, 2007 4:21 pm
by MOISES
Sí, lo que necesito es crear índices al vuelo. No puedo cerrar la base de datos, ni abrirla en modo exclusivo.

Muchas gracias.