PDA

Ver la Versión Completa : Dbf+cdx


ricmar
26-06-2003, 20:42:48
Hola.

Estoy haciendo un pequeño programa que debe utilizar unos ficheros de un conocido programa de contabilidad para extraer cierta información. Este programa está basado en Clipper + Fivewin, y utiliza ficheros .DBF e índices .CDX.

Estoy usando D7 y en principio no había problema, pero me he encontrado con que haciendo una simple consulta SQL, incluso desde el SQLExplorer se me queda "clavado" y debo "matar" el proceso.

La sentencia SQL es tan simple como:

select * from diario where fecha between "01/01/2002" and "01/30/2002"

El fichero diario.dbf tiene asociado un fichero de índice diario.cdx.

Si elimino el .cdx, arranco SQLExplorer, abro la tabla, me dice que no puede abrir el índice, le digo que es igual i que lo abra en modo de sólo lectura, no tengo problemas para hacer las consultas.

Hay alguna incompatibilidad con estos índices, o es que hago algo mal?

Alguien tiene alguna idea?

Saludos.

- Ricard -

marcoszorrilla
30-06-2003, 23:24:50
Me da la impresión que los ficheros son del tipo FoxPro.

Prueba a abrirlos con un Ttable y elige el tipo TTFoxPro, luego eliges el nombre de la tabla Diario.dbf y pinchas en IndexName y verás todos los índices.

Si es así puede que estemos hablando de ¿Conta Minus? Conta -

Bueno puede que sea al revés.

Un Saludo.

ricmar
02-07-2003, 14:37:42
Hola marcoszorrilla.

> ...puede que estemos hablando de ¿Conta Minus? Conta -

Pues si, mas o menos ;)

El caso es que dentro del SQL Explorer, si miro el alias que apunta al directorio de los ficheros, puedo ver que los ficheros del programa de contabilidad los identifica como FOX26, mientras que los que yo he creado los identifica como dBaseIV. En el programa cuando utilizo las tablas con tTable, tengo puesto como Table type: ttDefault, pero en el Query no puedo cambiarlo ?¿

De hecho, hace cosas raras.

Tengo una procedure que va haciendo querys para comprobar unos datos, pues bien, depende como le dá, funciona o se queda "colgado" y no he sido capaz de aislar el problema. Supongo que debe ser problema de los índices. Un trozo del código (extremadamente mejorable):

ListBox2.Items.Clear;
with DataModul.Query1 do
begin
SQL.Clear;
SQL.Add('select subcta from diario where asien = :NUMAS ');

for index := 0 to LisBox1.Items.Count-1 do
begin
Close; // Cierra Query
Params[0].AsInteger := StrToInt(ListBox1.Items[index]);
Open;
First;

while not eof do
begin
.....
Next;
end;
end;
end;

Pues debugueando me pasa que a veces se queda colgado en el Open. !¿?


No se. Empiezo a estar un poco "mosca".

Saludos y gracias por haber contestado.

P.D.

En la previsualización del mensaje veo que no respeta los espacios en la indentación del código.

marcoszorrilla
02-07-2003, 16:01:21
La verdad es que yo me conecto a diario con ese programa, a fin de comprobar descuadres entre "Facturación", y "Contabilidad" y no tengo ningún problema.

Monto un simple Tquery que me extrae los datos del diario para contrastarlos con facturación y viceversa.

En un combo muestro los clientes de un programa propio de facturación se elige uno y acto seguido se lanza una consulta sobre el diario y sobre el código de cliente elegido y ya está.

Prueba con un simple Query y verás como te funciona sin más problemas.

Un Saludo.

ricmar
15-07-2003, 17:38:27
Hola.

La solución *temporal* a este problema, ha sido desvincular el fichero índice del .dbf, es decir, he eliminado el .cdx, y con el SQL Explorer abrirlo y devincularlo.

De esta manera, consigo que todo el proceso se ejecute correctamente, lo que me "exime" de problemas de diseño.

El problema de esta solución, es que he de trabajar con una copia de los archivos, pues no puedo desvincular el fichero índice del dbf que están usando ;)

Es posible que con alguna libreria tipo Apollo, el tratamiento de este tipo de archivos (dbf+cdx) sea mejor?.

Saludos.