FoxPro/Visual FoxPro - CREAR INDICES EN VISTAS.. COMO PUEDO HACERLO ?

 
Vista:

CREAR INDICES EN VISTAS.. COMO PUEDO HACERLO ?

Publicado por Ernesto Rodríguez (61 intervenciones) el 13/04/2002 14:58:46
Tengo éste código en el evento INIT de un formulario :

SET MULTLOCKS ON
CURSORSETPROP("BUFFERING",5,alias())
SELECT vidocum && Este es el nombre de la vista
SET ORDER TO coddoc && Este campo es el que he definido en DBC
&& como índice normal.

Pero VFP lanza el mensaje de : "La Tabla no tien un orden de índice establecido".

Un amigo en el foro me dijo que tengo que crear los índices en la vista
también. Pero como hago esto ? No sé en que lugar tengo que
colocar el comando : INDEX ON && TAG &&

No se si colocarlo el algún evento del formulario o si irá en la
vista. Y si esto afectará de alguna forma la rapidez del programa.

Podrían ayudarme con esto ? De nuevo muchas gracias.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CREAR INDICES EN VISTAS.. COMO PUEDO HACERLO ?

Publicado por Alejandro Sánchez (1 intervención) el 18/04/2002 02:06:47
En las vistas con modo de almacenamiento en bufer a tabla (es decir 4 o 5), no se
les puede crear un indice, y por tanto no se puede hacer SEEK o INDEXSEEK en ellas.
Para resolver esto se ha reealizado la sisuiente rutina:
************************************************************
* Funcion: INDEXVISTA
* Indexa cualquier tipo de vista
* Parametros:
* tcvista - Nombre de la vista
* tcexpr - expresion completa para indexar
* tctag - nombre del indice (tag)
* Ejemplos:
* ret=indexview("lv_alelin","allart+STR(mov,3)","allart")
* Retorno
* devuelve verdadero/falso si se pudo crear el indice
* Nota
* La vista debe estar abierta
* Ultima Modificacion: 05/04/2000 Pablo Roca
* Creacion : 05/04/2000 Pablo Roca
************************************************************
FUNCTION indexvista (tcvista, tcexpr, tctag)
LOCAL lcOldBufering, llret, lcalias
IF PCOUNT()=3
lcalias = ALIAS()
SELECT (tcvista)
lcOldBufering=CURSORGETPROP("Buffering")
llret=CURSORSETPROP("Buffering",3)
IF llret
INDEX ON &tcexpr TAG (tctag)
SET ORDER TO
llret=CURSORSETPROP("Buffering",lcOldBufering)
ENDIF
IF !EMPTY(lcalias)
SELECT (lcalias)
ELSE
SELECT 0
ENDIF
ELSE
llret = .F.
ENDIF
RETURN llret
ENDFUNC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar