PDA

Ver la Versión Completa : Conexión Tablas FoxPro .Dbf


marcoszorrilla
15-03-2012, 10:22:35
Tenía una conexión con tablas FoxPro mediante BDE, pero al actualizar el programa que controla dichas tablas ha dejado de funcionarme.

El error que me arroja es "Invalid Index descriptor".

La conexión no modifica nada, es un simple select para cruzar unos datos.

Curiosamente si trato de abrir otras tablas de la misma aplicación me funciona la conexión actual, pero la tabla que necesito es la que no me funciona.

Estoy intentando una conexión con ADO pero tampoco me funciona.

A ver si alguien ha tenido este problema y lo ha resuelto.

Situación anterior:D7, Windows7 y BDE atacando con un TQuery (funcionaba)
Situación actual :La misma, sospecho que hay algún cambio en la cabecera de la tabla.

Un Saludo.

newtron
15-03-2012, 19:46:33
¿Es posible que el BDE haya cascado?

marcoszorrilla
15-03-2012, 22:04:56
No porque si intento conectarme a otras tablas de la misma aplicación lo hace, creo que el problema es que la tabla tiene algo en la cabecera que despista al BDE y por eso da el fallo.

Un Saludo.

roman
15-03-2012, 22:18:14
Un pregunta ingenua: ¿has probado borrar los índices de la tabla?

// Saludos

marcoszorrilla
16-03-2012, 07:13:57
La Aplicación trae una utilería para reconstruir los índices. Los he reconstruido, los he borrado y creado de nuevo, he tomado una tabla más antigua vacía y le he pasado los registros con Access, realmente ya no sé que hacer.

Un Saludo.

Casimiro Notevi
16-03-2012, 10:34:10
Mira si puedes reconstruir la cabecera del mismo, puede que se haya estropeado. Lo más fácil es coger cualquier backup que tengas de ese fichero y comprobar que los campos estén iguales. También se puede copiar completamente la cabecera "buena" encima de la de este fichero y modificar el indicador de número de registros que tiene.

ElDioni
16-03-2012, 11:49:56
Hola,

por lo que describes en tu problema supongo que son las tablas del programa facturaplus. A mi me pasaba con la tabla articulo.dbf, albclil.dbf y alguna más, eran tres o cuatro, creo que conseguí resolverlo poniendo, en un TTable, en la propiedad TableName la ruta completa de la tabla, en TableType el valor ttFoxPro y luego añadiendo el fichero de índices en la propiedad IndexFiles, te ponías en IndexDefs para comprobar que te cargaba bien el índice y entonces me dejaba conectarme.

Te digo que creo que conseguí resolverlo porque no lo puedo comprobar ya que hace 3 días hemos cargado una nueva actualización del facturaplus para la nueva normativa del 347 y lo que ocurre es que, al ir a probar esto que te comento, me doy cuenta de que ya no me da error ninguna tabla, no se si es que han corregido algo pero de momento funcionan todas las tablas.

Espero que algo de esto te sirva de ayuda.

Saludos.

marcoszorrilla
30-03-2012, 15:50:15
No ha habido manera de conectarse, así que he implementado una opción de urgencia puesto que solamente se trata de cruzar datos no de escribir en las tablas.

Como el Byte 29 es donde reside si la tabla tiene índices o no he hecho una copia de la tabla cada vez que entro con el motivo de que ésta este lo mas actualizada posible y luego le he cambiado el byte que es 01 por 00, y ya lo tengo funcionando.
procedure KillConta();
var
mystream : tfilestream;
FileName: String;
pOrigen,pDestino:Pchar;
Value:Longint;
begin
Value:=00;
FileName:='\\Servidor\CNdbf\XXX.dbf';
pOrigen:='\\Servidor\XXX\ConXXX\EmpXX\XXX.dbf';
pDestino:='\\Servidor\CNdbf\XXX.dbf';
Try
CopyFile(pOrigen,pDestino,False);
Except
ShowMessage('Error al copiar el Fichero XXXX.');
end;

mystream := tfilestream.create(filename,
fmOpenWrite + fmShareExclusive);
try
mystream.Seek(28, soFromBeginning);
mystream.Writebuffer(Value, SizeOf(Value));
finally
mystream.Free;
end;
end;


Un Saludo.

roman
30-03-2012, 18:23:27
Y, digo yo, ¿no serviría hacer esto?

1. Creas una copia limpia (misma estructura, sin índices y sin datos) de la tabla original.
2. Usas el truco del byte 29 para abrir la tabal original
3. Copias uno a uno los registros de la tabla original a la nueva.
4. Pones los índices a la tabla nueva.
5. Usas la tabla nueva.

// Saludos

marcoszorrilla
30-03-2012, 21:34:22
Román: Es que el único problema es que la tabla no se podía abrir y para hacer los cruces como la ataco con SQL los índices no me hacen falta. Ese es el motivo de hacer solamente la copia de la tabla y no de los índices, además en el momento que cambio el Byte 29 a 01 como en la situación original dejo de poder acceder y me reporta un error, otra posibilidad que estoy pensando aunque estoy satisfecho con la actual es intentar acceder por ejemplo con ADO, cosa que no sé si será posible.

Un Saludo.