FoxPro/Visual FoxPro - Problema creando indices

 
Vista:

Problema creando indices

Publicado por giovanni (64 intervenciones) el 10/03/2009 03:40:03
Hola a todos tengo un inconveniente no se si se pueda solucionar

Tengo unas tablas libres con sus indices cdx algunas con 1 entrada y otros con 2 o 3 entradas, en ocaciones hay que recrear los indices si hay cortes de luz o si los balances no cuadran e.t.c. para eso tengo una funcion la cual hace su tarea correctamente (supuestamente).

Probando la funcion y generandole errores encontre que cuando yo borro los archivos de indice .cdx y corro la funcion me genera el siguiente error

1707 no se encuentra el archivo cdx estructural

Pero este solo aparece cuando trata de abrir cualquier dbf con 2 o mas entradas (logico el archivo no existe por que yo lo borre) yo manejo este error con una rutina de errores que dice !!el archivo no esta disponible desea reintentarlo ? !! el usuario le da reintentar y entonces se genera el indice correctamente y listo. Ese mensaje es el que le muestro al usuario pero el verdadero error es el arriba escrito. Esta manera no es la mas ortodoxa pero funciona.

Otra manera que funciona es corriendo la funcion sin la rutina de errores entonces el genera todos los indices de 1 o 2 o cualquier entrada sin problema. Pero (siempre hay un pero) si alguna dbf no se puede abrir en exclusiva para generar los indices me generar un error. Esa era la idea inicial de la rutina de errores.

Mis preguntas son:

Existe alguna manera para saltar ese error (1707) y que no me pause el programa ?

Tengo que limitar esa opcion de recrear los indices con mensajes como !! ATENCION ESTE PROCESO ES MUY DELICADO asegurese que todos los usuarios este desconectados para continuar ?

Alguien tiene un ejemplo de una forma de hacerlo sin estos inconvenientes ?

Gracias por su colaboracion
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:Problema creando indices

Publicado por Osma (1 intervención) el 10/03/2009 18:24:04
Compañero para la primera pregunta muy facil le pasa un parametro a la funcion que le devuelva el numero del error ERROR() y con un IF lo evalua si el error es el numero 1707 le pone a hacer un RETRY y listo. Ud dice que cuando el usuario reintenta se genera el indice bien entonces esta es la manera mas facil desde la manera que lo entendi. creo q esa le funciona exitos.
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

RE:Problema creando indices

Publicado por mario (199 intervenciones) el 10/03/2009 19:38:43
Verificar si se puede abrir tabla en exclusiva

LPARAMETERS TcTabla
*--------------------------------------------------
*FUNCTION _Exclusivo(tcTabla)
*--------------------------------------------------
* Verifica si una tabla esta abierta en EXCLUSIVO
* USO: _Exclusivo("C:VFPMiTabla.DBF")
* PARAMETRO:
* tcTabla = Ruta completa del archivo .DBF
* RETORNO: .T. si se puede abrir en exclusivo
*--------------------------------------------------
LOCAL lnHandle, llRet

lnHandle = FOPEN(UPPER(tcTabla),12)

IF lnHandle = -1
llRet = .F.
ELSE
llRet = .T.
=FCLOSE(lnHandle)
ENDIF
RETURN llRet

En cuanto a eliminar los archivos CDX: en lugar de hacer esto te conviene abrir la tabla y luego DELETE TAG ALL;
con esto eliminás las referencias al CDX en la tabla.
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

PROBLEMA CREANDO INDICES

Publicado por giovanni (64 intervenciones) el 11/03/2009 02:58:57
Mario gracias por tu tiempo creo que esta funcion es un poco mas profesional y lo de eliminar las referencias con delete tag all no lo sabia voy a adaptarla a mi programa haber como funciona.

Lo unico que no entiendo es cuando quiere uno abrir un archivo de bajo nivel ? o mejor en que otro caso puedo aplircar esta funcion que no incluya una tabla y para que fin ?

gracias por ampliar las respuesta.

Para osma tu respuesta me funciona bien aunque nose no me gusta casi pero me soluciono el problema de rapidez

Gracias por tu tiempo tambien
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

RE:PROBLEMA CREANDO INDICES

Publicado por Mario (199 intervenciones) el 11/03/2009 13:56:58
Esta función intenta abrir un archivo en bajo nivel para su edición, si lo logra, lo cierra y devuelve verdadero.
La funcionalidad dependerá de tus necesidades. Por ejemplo, Enrique (un experto del foro) lo utiliza para determinar si un procedimiento de descompresión ha concluido.
Respecto de "cuándo uno quiere abrir un archivo a bajo nivel?", si bien no es algo habitual puede ser necesario al momento de corromperse tablas, bases de datos u otros archivos.
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

RE:PROBLEMA CREANDO INDICES

Publicado por Giovanni (64 intervenciones) el 13/03/2009 02:17:28
Gracias amigo muy interesante
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