Sv Community El Salvador
Soporte y Tecnología => Programación => FOX => Mensaje iniciado por: gandalf en septiembre 13, 2010, 08:32:50 pm
-
Buenas SVCommuniter:
Pues si tengo un problemita con un sistema en el que trabajo :cry: :cry: :cry:, no es mio es de un colega y este me pidio ayuda asi que como no se mucho de programacion (la verdad me interesa pero no hayo como aprender por el $$$$ :shock: :shock: :shock: que raro en estos tiempos :D :D :D), por eso les pido me ayuden digo yo que con poquito entiendo digo yo :embarassed: , si me pueden ayudar se los agradeceria :thumbsup: :thumbsup: .
Bueno el problemita es que me tira este mensaje :shock: :shock: "EL INDICE NO CORRESPONDE A LA TABLA. ELIMINE EL ARCHIVO DE INDICE Y VUELVA A CREAR EL INDICE".
(http://img96.imageshack.us/img96/3839/errorfl.jpg)
Pos como dije no soy programador (todavia :D :D :D) y no se a que indice se refiere, si es al de la base de datos o a que otro no se.... :dntknow: :dntknow: :dntknow:
-
pues para comenzar para poder ayudarte mejor tendrias que poner el codigo del modulo donde te da ese error o por lo menos una parte, aunque ese error me parece que es porque esta dañado el indice .IDX o .CDX y la solucion seria eliminarlo y volverlo a crear :roll:
mira esta info, creo que te va a servir
http://support.microsoft.com/kb/168762/es
-
Usando fox 9.0
yo lo que hago siempre que toco una tabla de fox es algo similar a esto:
TRY
use Nombre_Tabla
CATCH TO loError
lnerror = loError.ErrorNo
ENDTRY
if lnError = 0
continuo con la APP
else
controlar_error("Nombre_Tabla", lnError)
Reiniciar App
endif
para "controlar_error", creo un proceso aparte para accesarlo así desde cualquier punto de la App.
donde adentro es algo asi:
LPARAMETERS xTabla as string, xerrorx as integer
DO CASE
CASE xerrorx=1705
*Acceso denegado a la tabla (podria ser que este en uso exlusivo por otra instancia o otro usuario)
*Generalmente Reinicio la App.
CASE xerrorx=2066 o no recuerdo si es 114
*Este error es para los Indices Dañados
delete file(ruta+"Nombre_Tabla.cdx")
close tables all
on error *
use ruta+"Nombre_Tabla.dbf" exclusive in 0 again
close tables all
use ruta+"Nombre_Tabla.dbf" exclusive in 0 again
index on id_tabla tag id_tabla && id_tabla es el nombre del indice que quiero crear
index on nom_clien tag nom_clien && nom_clien es el nombre del indice que quiero crear
reindex compact
close tables all
* Para esta tabla he creado dos Indicies
OTHERWISE
*errores desconocidos
ENDCASE
NOTA. de preferencia y por experiencia propia esto de regerar o reparar las tablas lo ago usando un Ejecutable diferente al programa principal, algo asi como "rescate.exe", y mando a cerrar primero el programa principal y luego le paso algunos parametros al "rescate.exe" para que el se encarge de las reparaciones. (algo quizas no necesario pero es de la única forma que me ha funcionado a mi.)
-
Las tablas han de tener relaciones y lo que ha de haber pasado es que eliminaste el registro principal y quedo un registro huerfano en la tabla con la que esta relacionada...
Lo mejor seria respaldar y limpiar las tablas... o eliminar el registro huerfano
Si es una tabla libre, deberías crear de nuevo el índice desde el proyecto (en modo gráfico) o con el comando:
close all
use mi_tabla exclusive
modify structure
y alli volvés a crear el indice
Si la tabla está dentro de una Base de Datos y está relacionada con otras tablas. Deberías eliminar la relación y volver a crearla.
O sinó intentá con el comando:
use mi_tabla exclusive
reindex
Saludos men :thumbsup:
-
bueno, todos los compañeros que han opinado tienen razón, solo déjame agregar algo mas,
en la mayoría de sistemas en vfp con tablas nativas siempre "75%" se pone una opción de indexamiento de archivos, esto lo que debería de hacer es reconstruirte los indices de las tablas y con eso podrías solventar ese problema.
ese problema da cuando un indice por a,b,c, motivos se vuelve corrupto y hay que borrarlo y crearlo de nuevo.
algo mas, aquí estamos...
-
en teoria es como dice moises y elite, tan simple como eso, y por experiencia aveces funciona y aveces no, yo por eso lo hago de la forma que comente es por decirlo así 100% seguro que sea efectivo, algo mas complicado pero doy fe de que es 100% efectivo.
-
solamente verifica que tabla es la que esta dañada y en la linea de comandos abri la tabla de modo exclucivo y digita reindex
si asi no te solventa la situacion busca una copia de seguridad de la base o de esa tabla copia el archivo nombre_tabla.cdx y remplace el archivo nombre_tabla_dañada.cdx de esa misma tabla.
suerte...